如何在.NET中为XAttribute设置名称空间前缀?

时间:2010-12-10 06:35:10

标签: c# .net xml soap

全部, 我想创建一个肥皂信封xml文档,例如

<soap:Envelope soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding" xmlns:soap="http://www.w3.org/2001/12/soap-envelope"></soap:Envelope>

我正在使用System.Xml.Linq执行此操作,但我无法弄清楚如何将soap前缀添加到encodingStyle属性。

到目前为止,我有这个:

XNamespace ns = XNamespace.Get("http://www.w3.org/2001/12/soap-envelope");
XAttribute prefix = new XAttribute(XNamespace.Xmlns + "soap", ns);
XAttribute encoding = new XAttribute("encodingStyle", "http://www.w3.org/2001/12/soap-encoding");

XElement envelope = new XElement(ns + "Envelope", prefix, encoding);

给了我

<soap:Envelope encodingStyle="http://www.w3.org/2001/12/soap-encoding" xmlns:soap="http://www.w3.org/2001/12/soap-envelope"></soap:Envelope>

您使用XAttribute为元素添加前缀,我可以使用XAttributeXAttribute添加前缀吗?

谢谢,P

3 个答案:

答案 0 :(得分:10)

在创建'encodingStyle'XAttribute(使用ns + "encodingStyle")时指定命名空间:

XAttribute encoding = new XAttribute(ns + "encodingStyle", "http://www.w3.org/2001/12/soap-encoding");

two-parameter XAttribute constructorXName作为第一个参数。这可以通过string隐式构建(如问题代码中所示),也可以直接通过“string添加”到XNamespace来创建XName (如上所述)。

答案 1 :(得分:1)

您需要将XAttribute的XName与XNamespace结合使用。我知道对了......无论如何试试这个。

XNamespace soap = "http://www.w3.org/2001/12/soap-envelope";
XAttribute encoding = new XAttribute(soap + "encodingStyle",
    "http://www.w3.org/2001/12/soap-encoding");

答案 2 :(得分:0)

您需要使用XName.Get方法来构造带有名称空间的属性名称:

var xName = XName.Get("myAttributeName", "http://www.w3.org/2001/XMLSchema-instance");
var attr = new XAttribute(xName, "myAttributeValue");