如何在xml中编写CData

我有一个像xml:

     

我正在写数据,如:

 XmlNode xnode = xdoc.SelectSingleNode("entry/entry_status"); xnode.InnerText = "" ; 

但它改变了“<”到CDATA的“&lt;”。 请告诉我如何将上面的xml中的值填充为CData格式。

我知道我们可以像以下一样创建CDATA:

 XmlNode itemDescription = doc.CreateElement("description"); XmlCDataSection cdata = doc.CreateCDataSection("

hello world

"); itemDescription.AppendChild(cdata); item.AppendChild(itemDescription);

但我的过程是读取xml的节点并更改其值而不是附加在其中。 谢谢

真的需要它在CDATA中,或者你只是想以一种不需要在你的代码中额外转义的方式获取文本?

InnerText执行任何需要的转义,所以通常我只是使用

 xnode.InnerText = Convert.ToString(sqlReader["story_status"]); 

…但是如果你真的想要一个CDATA节点 ,你可以根据Nekresh的答案自己创建一个节点 。

如下所述: msdn

 // Create an XmlCDataSection from your document var cdata = xdoc.CreateCDataSection(Convert.ToString(sqlReader["story_status"])); // Append the cdata section to your node xnode.AppendChild(cdata); 

如果你真的需要CDATA部分(参见Jon的答案 ),你可以这样做:

 XmlNode xnode = xdoc.SelectSingleNode("entry/entry_status"); XmlCDataSection cdata = xdoc.CreateCDataSection(Convert.ToString(sqlReader["story_status"])); xnode.InnerXml = cdata.OuterXml; 

这将替换 xnode的内容,而不是附加到它。

 XmlNode childNode = node.ChildNodes[0]; if (childNode is XmlCDataSection) { XmlCDataSection cdataSection = childNode as XmlCDataSection; cdataSection.Value = newValue; } 

使用Node.InnerXml,而不是Node.InnerText。 Node.InnerText自动替换特殊值。 请注意,如果在InnerXml中使用CDATA指定,则Node.InnerText是CDATA中的文本。 例:

 public class Test { public static int Main(string[] args) { const string xmlTxt = @"    "; TextReader treader = new StringReader(xmlTxt); XmlReader xreader = XmlReader.Create(treader); XmlDocument xdoc = new XmlDocument(); xdoc.Load(xreader); XmlNode xnode = xdoc.SelectSingleNode("entry/entry_status"); //xnode.InnerText = ""; xnode.InnerXml = ""; Console.WriteLine("inner text is: " + xnode.InnerText); xdoc.Save(Console.Out); Console.WriteLine(); return 0; } } 

程序的输出:

内在的文字是:某事
 <?xml version =“1.0”encoding =“ibm852”?>
 <条目>
   
   
    <![CDATA [东西]]> 
 

你可以使用writer.WriteCData(value);

其中writer是XmlWriter对象。