我有一个像xml:
<?xml version="1.0" encoding="UTF-8"?>
<entry>
<entry_id></entry_id>
<entry_status></entry_status>
</entry>
Run Code Online (Sandbox Code Playgroud)
我正在写数据,如:
XmlNode xnode = xdoc.SelectSingleNode("entry/entry_status");
xnode.InnerText = "<![CDATA[ " + Convert.ToString(sqlReader["story_status"]) + " ]]>" ;
Run Code Online (Sandbox Code Playgroud)
但它改变了"<"到CDATA的"<".请告诉我如何将上面的xml中的值填充为CData格式.
我知道我们可以像以下一样创建CDATA:
XmlNode itemDescription = doc.CreateElement("description");
XmlCDataSection cdata = doc.CreateCDataSection("<P>hello world</P>");
itemDescription.AppendChild(cdata);
item.AppendChild(itemDescription);
Run Code Online (Sandbox Code Playgroud)
但我的过程是读取xml的节点并更改其值而不是附加在其中.谢谢
Nek*_*esh 19
如下所述: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);
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 17
你真的需要它在CDATA中,或者你只是想以一种不需要在你的代码中额外转义的方式获取文本?
InnerText 执行任何需要的转义,所以通常我只是使用
xnode.InnerText = Convert.ToString(sqlReader["story_status"]);
Run Code Online (Sandbox Code Playgroud)
...但是如果你真的想要一个CDATA节点,你可以根据Nekresh的答案自己创建一个节点.
Fre*_*örk 11
如果你真的需要CDATA部分(参见Jon的答案),你可以这样做:
XmlNode xnode = xdoc.SelectSingleNode("entry/entry_status");
XmlCDataSection cdata = xdoc.CreateCDataSection(Convert.ToString(sqlReader["story_status"]));
xnode.InnerXml = cdata.OuterXml;
Run Code Online (Sandbox Code Playgroud)
这将取代内容xnode,而不是附加到它上面.
使用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
程序的输出:
内部文字是:某事 <?xml 版本 =“1.0”编码 =“ibm852”?> <条目> <条目ID> </entry_id> <entry_status><![CDATA[某事]]></entry_status> </条目>
| 归档时间: |
|
| 查看次数: |
57432 次 |
| 最近记录: |