如何在不进行任何修改的情况下添加InnerXml?

时间:2013-02-12 20:47:42

标签: c# .net xml xml-namespaces

我试图找到一种简单的方法,将XML添加到XML-with-xmlns而不必获取xmlns="",也不必每次都指定xmlns

我尝试了XDocumentXmlDocument,但找不到简单的方法。我得到的最接近的是:

XmlDocument xml = new XmlDocument();

XmlNode docNode = xml.CreateXmlDeclaration("1.0", "UTF-8", null);
xml.AppendChild(docNode);
XmlElement root = xml.CreateElement("root", @"http://example.com");
xml.AppendChild(root);

root.InnerXml = "<a>b</a>";

但我得到的是:

<root xmlns="http://example.com">
  <a xmlns="">b</a>
</root>

那么:有没有办法设置InnerXml而不修改它?

1 个答案:

答案 0 :(得分:2)

您可以像创建a元素一样创建XmlElement root,并指定该元素的InnerText

选项1:

string ns = @"http://example.com";

XmlDocument xml = new XmlDocument();

XmlNode docNode = xml.CreateXmlDeclaration("1.0", "UTF-8", null);
xml.AppendChild(docNode);

XmlElement root = xml.CreateElement("root", ns);
xml.AppendChild(root);

XmlElement a = xml.CreateElement("a", ns);
a.InnerText = "b";
root.AppendChild(a);

选项2:

XmlDocument xml = new XmlDocument();

XmlNode docNode = xml.CreateXmlDeclaration("1.0", "UTF-8", null);
xml.AppendChild(docNode);

XmlElement root = xml.CreateElement("root");
xml.AppendChild(root);
root.SetAttribute("xmlns", @"http://example.com");

XmlElement a = xml.CreateElement("a");
a.InnerText = "b";
root.AppendChild(a);

产生的XML:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://example.com">
    <a>b</a>
</root>

如果您使用root.InnerXml = "<a>b</a>";而非从XmlElement创建XmlDocument,则生成的XML为:

选项1:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://example.com">
    <a xmlns="">b</a>
</root>

选项2:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://example.com">
    <a xmlns="http://example.com">b</a>
</root>