2013-08-04 29 views
5

Tôi có một XmlNode đại diện cho xml sau ví dụ:Loại bỏ CDATA thẻ từ XmlNode

XmlNode xml.innerText = 
<book> 
<name><![CDATA[Harry Potter]]</name> 
<author><![CDATA[J.K. Rolling]]</author> 
</book> 

Tôi muốn thay đổi nút này để nó sẽ chứa những điều sau đây:

XmlNode xml.innerText = 
<book> 
<name>Harry Potter</name> 
<author>J.K. Rolling</author> 
</book> 

Bất kỳ ý tưởng?
Cảm ơn!

+0

là bất kỳ nhu cầu cụ thể của họ loại bỏ thẻ hoặc bạn chỉ muốn đọc các giá trị ? Và bằng cách này luôn luôn gửi mẫu chính xác. Bạn đang thiếu thẻ cdata đóng trong mẫu xml của mình. – Ehsan

+0

Có, nó được chuyển cho một khách hàng – Niv

+0

người đang tạo xml? – Ehsan

Trả lời

8

tốt, nếu nó chính xác như bạn đặt nó, sau đó nó rất dễ dàng:

xml.innerText = xml.innerText.Replace("![CDATA[","").Replace("]]",""); 
xmlDoc.Save();// xmlDoc is your xml document 
+0

Thật không may, nó không chính xác như thế nào tôi đặt nó. Nó lồng nhau phức tạp hơn, và mã này (mà tôi đã thử) dường như loại bỏ các phần chính khác cũng như – Niv

+0

@Niv bạn có thể chia sẻ nhiều mã của bạn hơn hoặc cung cấp thêm thông tin cho chúng tôi không? đó là thao tác chuỗi bạn muốn tôi nghĩ, nhưng tôi không biết thao tác chính xác nào bạn cần. Tôi có thể giúp đỡ nếu bạn có thêm thông tin –

+2

Điều này làm việc vết thương, chỉ với một sửa đổi nhỏ: thay vì innerText, tôi cần sử dụng innerXML. Tnx! – Niv

1

Tôi khuyên bạn nên đọc toàn bộ xml và viết lại. Bạn có thể đọc các giá trị mà không cdata như thế này

foreach (var child in doc.Root.Elements()) 
    { 
     string name = child.Name; 
     string value = child.Value 
    } 
+1

Có thể XML được cung cấp từ bên thứ ba và cần được dọn dẹp. –

+0

Một lý do để loại bỏ CDATA là libxml không xử lý CDATA. Điều này sẽ yêu cầu anh ta lấy dữ liệu nhận được từ bên thứ ba và biến nó thành một định dạng sẽ hoạt động hoặc xóa nó. Xem [gnome và CDATA] (https://mail.gnome.org/archives/xml/2008-September/msg00092.html). Ngoài ra, [Gnome và CDATA cũng] (http://www.xmlsoft.org/search.php?query=cdata&submit=Search). – Michele

Các vấn đề liên quan