2

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>

ありがとう、

ジェームズ。

4

1 に答える 1

4

次のように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();
于 2012-08-02T12:00:36.293 に答える