Используя C# и XDocument, как мне добавить атрибуты xsi в некоторые Xml?
Мне нужно исправить Linq в Xsd, чтобы он правильно обрабатывал массивы элементов глобального абстрактного сложного типа, из которых есть несколько производных неабстрактных типов. Он не добавляет пространство имен xsi и не размечает элементы их производными типами. Но сначала мне нужно научиться делать следующее:
Используя C# и XDocument, как я могу добавить пространство имен и атрибуты xsi в следующий xml?
<?xml version="1.0" encoding="utf-8"?>
<Form>
<References>
<ReferenceID>0</ReferenceID>
<ReferenceType>string</ReferenceType>
<PermitNumber>string</PermitNumber>
</References>
<References>
<ReferenceID>0</ReferenceID>
<ReferenceType>string</ReferenceType>
<CaseNumber>string</CaseNumber>
</References>
</Form>
Это то, что у меня есть, но это то, что мне нужно:
<?xml version="1.0" encoding="UTF-8"?>
<Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<References xsi:type="Permit">
<ReferenceID>0</ReferenceID>
<ReferenceType>String</ReferenceType>
<PermitNumber>String</PermitNumber>
</References>
<References xsi:type="Case">
<ReferenceID>0</ReferenceID>
<ReferenceType>String</ReferenceType>
<CaseNumber>String</CaseNumber>
</References>
</Form>
Спасибо,
Джеймс.
1 ответ
Решение
Просто используйте XAttribute следующим образом:
(файл "original.xml" содержит ваш первый xml)
var xml = XDocument.Load("original.xml");
XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance";
var formNode = xml.Element("Form");
formNode.Add(new XAttribute(XNamespace.Xmlns + "xsi", ns));
var refs = formNode.Elements("References").ToList();
refs[0].Add(new XAttribute(ns + "type", "Permit"));
refs[1].Add(new XAttribute(ns + "type", "Case"));
string target = xml.ToString();