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;
}