[英]How to write CData in xml
我有一个像xml:
<?xml version="1.0" encoding="UTF-8"?>
<entry>
<entry_id></entry_id>
<entry_status></entry_status>
</entry>
我正在写数据,如:
XmlNode xnode = xdoc.SelectSingleNode("entry/entry_status");
xnode.InnerText = "<![CDATA[ " + Convert.ToString(sqlReader["story_status"]) + " ]]>" ;
但它改变了“<”到CDATA的“&lt;”。 请告诉我如何将上面的xml中的值填充为CData格式。
我知道我们可以像以下一样创建CDATA:
XmlNode itemDescription = doc.CreateElement("description");
XmlCDataSection cdata = doc.CreateCDataSection("<P>hello world</P>");
itemDescription.AppendChild(cdata);
item.AppendChild(itemDescription);
但我的过程是读取xml的节点并更改其值而不是附加在其中。 谢谢
如下所述: 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 = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<entry>
<entry_id></entry_id>
<entry_status></entry_status>
</entry>";
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 = "<![CDATA[something]]>";
xnode.InnerXml = "<![CDATA[something]]>";
Console.WriteLine("inner text is: " + xnode.InnerText);
xdoc.Save(Console.Out); Console.WriteLine();
return 0;
}
}
程序的输出:
inner text is: something <?xml version="1.0" encoding="ibm852"?> <entry> <entry_id> </entry_id> <entry_status><![CDATA[something]]></entry_status> </entry>
你可以使用writer.WriteCData(value);
其中writer是XmlWriter
对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.