2013-07-01 4 views
4

Я создаю XML-файл из кода C#, но когда я добавляю атрибут к узлу XML, у меня возникает проблема. Ниже приведен код.Как добавить атрибут XML в файл XML в C#

XmlDocument doc = new XmlDocument(); 
XmlNode docRoot = doc.CreateElement("eConnect"); 
doc.AppendChild(docRoot); 
XmlNode eConnectProcessInfo = doc.CreateElement("eConnectProcessInfo"); 
XmlAttribute xsiNil = doc.CreateAttribute("xsi:nil"); 
xsiNil.Value = "true"; 
eConnectProcessInfo.Attributes.Append(xsiNil); 
docRoot.AppendChild(eConnectProcessInfo); 

Результат:

<eConnect> 
    <eConnectProcessInfo nil="true"/> 
</eConnect> 

Ожидаемый результат:

<eConnect> 
    <eConnectProcessInfo xsi:nil="true"/> 
</eConnect> 

атрибут XML не добавляет "XSI: ноль" в XML-файле. Пожалуйста, помогите мне в этом, где я ошибаюсь.

+0

Вы видели: HTTP://stackoverflow.com/questions/2255311/how-to-create-xmlelement-attributes-with-prefix – Satpal

+2

Просто подсказка: это намного проще с XLinq ('XElement') –

ответ

5

Вы должны добавить схему в документ для XSI первого

UPDATE также необходимо добавить пространство имен в качестве атрибута к корневому объекту

//Store the namespaces to save retyping it. 
string xsi = "http://www.w3.org/2001/XMLSchema-instance"; 
string xsd = "http://www.w3.org/2001/XMLSchema"; 
XmlDocument doc = new XmlDocument(); 
XmlSchema schema = new XmlSchema(); 
schema.Namespaces.Add("xsi", xsi); 
schema.Namespaces.Add("xsd", xsd); 
doc.Schemas.Add(schema); 
XmlElement docRoot = doc.CreateElement("eConnect"); 
docRoot.SetAttribute("xmlns:xsi",xsi); 
docRoot.SetAttribute("xmlns:xsd",xsd); 
doc.AppendChild(docRoot); 
XmlNode eConnectProcessInfo = doc.CreateElement("eConnectProcessInfo"); 
XmlAttribute xsiNil = doc.CreateAttribute("nil",xsi); 
xsiNil.Value = "true"; 
eConnectProcessInfo.Attributes.Append(xsiNil); 
docRoot.AppendChild(eConnectProcessInfo); 
+0

Это не дает результата: Мой ожидаемый результат ::: user2493287

+0

@ user2493287 Пожалуйста, см. Обновленный ответ, я забыл включить строку, которая добавляет атрибут xmlns. Я также похлопываю по пространству имен xsd, которое вы хотите –

+0

@ user2493287 Мой ответ не включает его, но ваш комментарий указывает, что вам нужно создать элемент 'SOPTransactionType>', прежде чем добавлять 'eConnectProcessInfo' –

Смежные вопросы