添加具有格式的XML节点
问题描述:
我正在向XML文件添加节点,但我需要将其正确格式化。你能协助吗?添加具有格式的XML节点
String newFile = System.IO.Path.GetFileName(textBox1.Text);
//file name
string filename = @"palette.xml";
XmlDocument doc = new XmlDocument();
doc.Load(filename);
//create node and add value
XmlNode node = doc.CreateNode(XmlNodeType.Element, "item", null);
//create title node
XmlNode nodeTitle = doc.CreateElement("name");
//add value for it
nodeTitle.InnerText = @"<![CDATA["+newFile+"]]>";
//create Url node
XmlNode nodeUrl = doc.CreateElement("imgfile");
nodeUrl.InnerText = newFile;
//add to parent node
node.AppendChild(nodeTitle);
node.AppendChild(nodeUrl);
//add to elements collection
doc.DocumentElement.AppendChild(node);
//save back
doc.Save(filename);
的XML应该寻找这样的:
<item>
<name><![CDATA[panda.gif]]></name>
<imgfile>panda.gif</imgfile>
</item>
,但它看起来像:
<item>
<name><![CDATA[panda.gif]]></name>
<imgfile>panda.gif</imgfile>
</item>
答
有一种方法,你可以用它来包裹CDATA它。
XMLNode.AppendChild(XMLDocument.CreateCDataSection(newFile));
它XMLDocument.CreateCDataSection返回XmlCDataSection对象,你可以追加到您的节点,它会包裹你的文件中CDATA。
检查了这一点的详细资料:http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.createcdatasection.aspx
答
CDATA被认为是一个节点,而不是内部的文本
<item>
<name>
<![CDATA[panda.gif]]>
</name>
<imgfile>panda.gif</imgfile>
</item>
所以:
XmlElement nodeTitle = document.CreateElement("name");
XmlCDataSection CDATA = document.CreateCDataSection("panda.gif");
nodeTitle.AppendChild(CDATA);
node.AppendChild(nodeTitle);
您能给一个更好的解释? – Andrew 2011-12-27 17:58:00
不用担心......好吧,你在代码中做的方式是试图将CDATA直接放入内部文本中。这就是为什么它解析不正确。我上面给你的那一行是使用XMLDocument类来调用一个名为CreateCDataSection的方法来将你的字符串封装在CDATA中。 – Algorhythm 2011-12-27 18:57:16