Создание пустого атрибута XML, проблема с символом ':' - PullRequest
0 голосов
/ 14 декабря 2011

Я пытаюсь создать xml со следующим кодом.

XmlDocument xmlDocument = new XmlDocument();

XmlProcessingInstruction xPI = xmlDocument.CreateProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
xmlDocument.AppendChild(xPI);

XmlElement xElmntheader = xmlDocument.CreateElement("soapenv:Header", " ");
xmlDocument.AppendChild(xElmntheader);

MemoryStream ms = new MemoryStream();
xmlDocument.Save(ms);

string text = System.Text.Encoding.GetEncoding("UTF-8").GetString(ms.GetBuffer(), 0, (int)ms.Length);

Выход

<xml version='1.0' encoding='UTF-8'?>
<soapenv:Header xmlns:soapenv=" " />

Я пытался создать вот так

<xml version='1.0' encoding='UTF-8'?>
<soapenv:Header/>

Как убрать xmlns:soapenv=" " из soapenv:Header?

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

Что вы спрашиваете, как сделать, это создать плохо сформированный (синтаксически некорректный) XML.API XmlDocument не предназначен для этого.

Если вы используете имя элемента

soapenv:Header

, это означает, что soapenv - это префикс пространства имен, который был объявлен для этого элемента (илипредка) с использованием псевдоатрибута xmlns:soapenv.Если он не был объявлен, ваш вывод XML не будет принят любым уважающим себя анализатором XML.

Сигнатура метода, которую вы вызвали,

xmlDocument.CreateElement(string1, string2);

принимает два аргумента: полное имяэлемента (который может включать префикс, как это происходит в вашем случае);и URI пространства имен. Документация показывает ожидаемый результат:

Следующий код C #

XmlElement elem;
elem = doc.CreateElement("xy:item", "urn:abc");

приводит к элементу, эквивалентному следующему тексту XML.

<xy:item xmlns:item="urn:abc"/>

Ожидаемый URI пространства имен для этого элемента: "http://schemas.xmlsoap.org/soap/envelope/". Так что вы захотите объявить префикс soapenv с этим URI пространства имен:

string soapNSURI = "http://schemas.xmlsoap.org/soap/envelope/";

и использовать еготаким образом:

XmlElement xElmntheader = xmlDocument.CreateElement("soapenv:Header", soapNSURI);
0 голосов
/ 14 декабря 2011

Создайте без пространства имен (например, используйте пространство имен по умолчанию), и тогда эта часть не понадобится:

xmlDocument.CreateElement("Header"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...