使用C#和XDocument,我如何将xsi属性添加到一些Xml中



我需要将Linq修复为Xsd,以便它正确处理全局抽象复杂类型的元素数组,其中有多个派生的非抽象类型。它不添加xsi命名空间,也不使用派生类型标记元素。但首先我需要学习如何做到以下几点:

使用C#和XDocument,如何向以下xml添加xsi命名空间和属性?

<?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>

谢谢,

詹姆斯。

只需像这样使用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();

最新更新