添加带格式的XML节点

时间:2011-12-27 17:28:13

标签: c# xml formatting

我正在向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>&lt;![CDATA[panda.gif]]&gt;</name>
  <imgfile>panda.gif</imgfile>
  </item>

2 个答案:

答案 0 :(得分:5)

有一种方法可以用来包装cdata。

XMLNode.AppendChild( XMLDocument.CreateCDataSection( newFile ) );

XMLDocument.CreateCDataSection返回XmlCDataSection对象,您可以将该对象附加到您的节点,它将把您的文件包装在CDATA中。

查看此信息以获取更多信息:http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.createcdatasection.aspx

答案 1 :(得分:0)

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