C# 如何用xml编写CData

C# 如何用xml编写CData,c#,xml,C#,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"); xn

我有一个类似于:

<?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"]) + " ]]>" ;    
XmlNode xnode=xdoc.SelectSingleNode(“进入/进入状态”);
xnode.InnerText=“”;
但其变化“如下所述:

您真的需要它位于CDATA中,还是只想以一种不需要在代码中进行额外转义的方式获取文本

InnerText
执行所需的任何转义,因此通常我只使用

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

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

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


其中writer是
XmlWriter
对象。

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

公共类测试
{
公共静态int Main(字符串[]args)
{
常量字符串xmlTxt=@”
";
TextReader treader=新的StringReader(xmlTxt);
XmlReader=XmlReader.Create(treader);
XmlDocument xdoc=新的XmlDocument();
xdoc.Load(xreader);
XmlNode xnode=xdoc.SelectSingleNode(“入口/入口状态”);
//xnode.InnerText=“”;
xnode.InnerXml=“”;
Console.WriteLine(“内部文本为:”+xnode.InnerText);
Save(Console.Out);Console.WriteLine();
返回0;
}
}
程序输出:

inner text is: something <?xml version="1.0" encoding="ibm852"?> <entry> <entry_id> </entry_id> <entry_status><![CDATA[something]]></entry_status> </entry> 内部文本是:某物
如果您确实需要CDATA部分(请参阅),您可以这样实现:

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

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

很好,这意味着我正在用xml编写。excape字符将自动处理,xml读取器将不会遇到任何问题,我的xml也不会中断。对吗?@Rajesh:没错。您可以看出,设置
InnerText
属性会执行以下操作:caping,因为这正是您当前的方法不起作用的原因-它正在转义文本“我不想追加”。我想改变它的价值。。元素已经存在
XmlNode childNode = node.ChildNodes[0];
if (childNode is XmlCDataSection)
{
    XmlCDataSection cdataSection = childNode as XmlCDataSection;
    cdataSection.Value = newValue;
}
inner text is: something <?xml version="1.0" encoding="ibm852"?> <entry> <entry_id> </entry_id> <entry_status><![CDATA[something]]></entry_status> </entry>
XmlNode xnode = xdoc.SelectSingleNode("entry/entry_status"); 
XmlCDataSection cdata = xdoc.CreateCDataSection(Convert.ToString(sqlReader["story_status"]));
xnode.InnerXml = cdata.OuterXml;
XmlNode childNode = node.ChildNodes[0];
if (childNode is XmlCDataSection)
{
    XmlCDataSection cdataSection = childNode as XmlCDataSection;
    cdataSection.Value = newValue;
}