使用命名空间在c#中创建XML

时间:2012-04-05 12:43:07

标签: c# xml xml-namespaces xmldocument

我需要以下列形式生成XML:

<ns1:root xmlns:ns1="http://example.com/xmlns1" xmlns:ns2="http://example.com/xmlns2">
    <ns2:item ns2:param="value" />
</ns1:root>

我使用此代码:

XmlDocument xDoc = new XmlDocument();
XmlElement xRootElement = (XmlElement)xDoc.AppendChild(xDoc.CreateElement("ns1:root"));
xRootElement.SetAttribute("xmlns:ns1", "http://example.com/xmlns1");
xRootElement.SetAttribute("xmlns:ns2", "http://example.com/xmlns2");
XmlElement xElement = (XmlElement)xRootElement.AppendChild(xDoc.CreateElement("ns2:item"));
xElement.SetAttribute("ns2:param", "value");

但结果如下:

<root xmlns:ns1="http://example.com/xmlns1" xmlns:ns2="http://example.com/xmlns2">
    <item param="value" />
</root>

感谢您的建议。

2 个答案:

答案 0 :(得分:0)

XmlElement xElement =(XmlElement)xRootElement.AppendChild(xDoc.CreateElement(&#34; ns2:item&#34; ,&#34; http://example.com/xmlns2"));

给我:

<root xmlns:ns1="http://example.com/xmlns1" xmlns:ns2="http://example.com/xmlns2">
  <ns2:item param="value" />
</root>

顺便说一下,"ns2:param"不是必需的。 XML属性与元素属于同一名称空间。

答案 1 :(得分:0)

试试这个:

XmlDocument xDoc = new XmlDocument();
XmlElement xRootElement = (XmlElement)xDoc.AppendChild(xDoc.CreateElement("ns1:root"));
xRootElement.SetAttribute("xmlns:ns1", "http://example.com/xmlns1");
xRootElement.SetAttribute("xmlns:ns2", "http://example.com/xmlns2");
XmlElement xElement =     (XmlElement)xRootElement.AppendChild(xDoc.CreateElement("item", "http://example.com/xmlns1"));
xElement.SetAttribute("param", "http://example.com/xmlns1", "value");