Подтвердить что ты не робот

Как установить префикс пространства имен в 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

4b9b3361

Ответ 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");