使用XmlDocument.CreateElement()创建带有命名空间的XML元素

时间:2014-04-09 12:41:15

标签: c# .net xml namespaces

我正在尝试使用C#和.NET(版本2.0 ..是,版本2.0)创建XmlDocument。我使用:

设置了命名空间属性
document.DocumentElement.SetAttribute(
    "xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope");

当我使用:

创建新的XmlElement
document.createElement("soapenv:Header");

...它在最终的XML中不包含soapenv命名空间。任何想法为什么会这样?

更多信息:

好的,我会尝试澄清一下这个问题。我的代码是:

XmlDocument document = new XmlDocument();
XmlElement element = document.CreateElement("foo:bar");
document.AppendChild(element); Console.WriteLine(document.OuterXml);

输出:

<bar />

然而,我想要的是:

<foo:bar />

2 个答案:

答案 0 :(得分:2)

您可以使用XmlDocument.CreateElement Method (String, String, String)

bar元素指定命名空间

示例:

using System;
using System.Xml;

XmlDocument document = new XmlDocument();

// "foo"                    => namespace prefix
// "bar"                    => element local name
// "http://tempuri.org/foo" => namespace URI

XmlElement element = document.CreateElement(
    "foo", "bar", "http://tempuri.org/foo");

document.AppendChild(element);
Console.WriteLine(document.OuterXml);

预期输出:

<foo:bar xmlns:foo="http://tempuri.org/foo" />

答案 1 :(得分:-1)

也许您可以分享您期望的最终XML文档。

但是根据我的理解,您希望这样做:

    <?xml version="1.0"?>
    <soapMessage xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope">
        <Header xmlns="http://schemas.xmlsoap.org/soap/envelope" />
    </soapMessage>

所以这样做的代码是:

    XmlDocument document = new XmlDocument();
    document.LoadXml("<?xml version='1.0' ?><soapMessage></soapMessage>");
    string soapNamespace = "http://schemas.xmlsoap.org/soap/envelope/";
    XmlAttribute nsAttribute = document.CreateAttribute("xmlns","soapenv","http://www.w3.org/2000/xmlns/");
    nsAttribute.Value = soapNamespace;
    document.DocumentElement.Attributes.Append(namespaceAttribute);
    document.DocumentElement.AppendChild(document.CreateElement("Header",soapNamespace));