Как установить префикс пространства имен для XAttribute в .NET? - PullRequest
14 голосов
/ 10 декабря 2010

Все, Я хочу создать 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, чтобы добавить префикс к элементу, могу ли я использовать XAttribute, чтобы добавить префикс к XAttribute ??!

спасибо, P

Ответы [ 2 ]

10 голосов
/ 10 декабря 2010

Укажите пространство имен при создании XAttribute 'encodingStyle' (с помощью ns + "encodingStyle"):

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

Двухпараметрический конструктор XAttribute принимает XName в качествеПервый аргумент.Это может быть либо неявно построено из string (как в коде в вашем вопросе), либо напрямую путем «добавления» string к XNamespace для создания XName (как указано выше).

1 голос
/ 10 декабря 2010

Вам необходимо объединить XName вашего XAttribute с 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...