【问题标题】:Using C# and XDocument, how to I add xsi attributes into some Xml?使用 C# 和 XDocument,如何将 xsi 属性添加到某些 Xml 中?
【发布时间】:2012-08-02 08:32:54
【问题描述】:

我需要修复 Linq to 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>

谢谢,

詹姆斯。

【问题讨论】:

    标签: linq-to-xml linq-to-xsd


    【解决方案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();
    

    【讨论】:

    • 谢谢,现在我需要做的就是破解 Linq To Xsd 让它破解该代码! :)
    猜你喜欢
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2014-07-21
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多