Как установить префикс пространства имен в XAttribute в .NET?
Все,
Я хочу создать XML-документ с конвертом soap, например.
<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
Ответы
Ответ 1
Укажите пространство имен при создании XAttribute 'encodingStyle' (с помощью ns + "encodingStyle"
):
XAttribute encoding = new XAttribute(ns + "encodingStyle", "http://www.w3.org/2001/12/soap-encoding");
двухпараметрический конструктор XAttribute принимает в качестве первого аргумента XName
. Это может быть либо неявно построено с помощью string
(как в коде вашего вопроса), либо непосредственно путем "добавления" string
к XNamespace
для создания XName
(как указано выше).
Ответ 2
Вам нужно объединить 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");