2015-03-19 69 views
3

我有以下XML提取和使用C#

<parent> 
    <child>abra</child> 
    <child>kadabra</child> 
    <child>alakazam</child> 
    <![CDATA[ some data here ]]> 
</parent> 

我想提取CDATA部分,我所做的是修改XML的CDATA部分 - 轉換的數據轉換成字符串,用下面的代碼中提取它

string toText = xmlDoc.OuterXml.Substring(xmlDoc.OuterXml.IndexOf("<![CDATA[") + "<![CDATA[".Length); 
toText = toText.Remove(toText.IndexOf("]]>")); 

其中xmlDoc中,是爲XMLDocument這contails上面的XML

是否有這樣做的沒有更好的辦法?

我google了很多,但是我得到的僅僅是cdata部分的提取,只有它的父元素的唯一的孩子。

最後我想修改CDATA節和修改當前XML作爲

<parent> 
    <child>abra</child> 
    <child>kadabra</child> 
    <child>alakazam</child> 
    <![CDATA[ modified data here ]]> 
</parent> 

回答

5

鑑於這種有效 XML示例:

<parent> 
    <child>1</child> 
    <child>2</child> 
    <child>3</child> 
    <![CDATA[ some data here ]]> 
</parent> 

自認爲是<parent>直接孩子唯一的文本節點是您想要獲得的cdata部分,您可以通過這種方式選擇cdata部分並修改其內容:

var cdata = (XmlCDataSection)xmlDoc.SelectSingleNode("/parent/text()"); 
cdata.InnerText = " modified data here "; 
Console.WriteLine(xmlDoc.OuterXml); 

另一種可能的方法是使用XDocument,以取代舊的圖書館,XmlDocument

var doc = XDocument.Load("path_to_your_xml"); 
var xcdata = doc.DescendantNodes().OfType<XCData>().FirstOrDefault(); 
xcdata.Value = " modified data here "; 
Console.WriteLine(doc.ToString()); 

輸出爲如下(格式化的可讀性):

<parent> 
    <child>1</child> 
    <child>2</child> 
    <child>3</child> 
    <![CDATA[ modified data here ]]> 
</parent> 
+0

非常感謝har07。有效。它幫助我理解了很多。 :) – Bopsi 2015-03-19 07:01:56

+0

很高興幫助:) – har07 2015-03-20 07:56:03