3

次のような同じタイプの 2 つの XML 要素 (同じスキーマを持つ異なる XML ドキュメントから) があります。

<Parent>
  <ChildType1>contentA</ChildType1>
  <ChildType2>contentB</ChildType2>
  <ChildType3>contentC</ChildType3>
</Parent>

<Parent>
  <ChildType1>contentD</ChildType1>
  <ChildType3>contentE</ChildType3>
</Parent>

要素タイプ ChildType1、ChildType2、および ChildType3 は、Parent 要素内に最大 1 つのインスタンスを持つことができます。

私がする必要があるのは、2 番目の親ノードの内容を最初の親ノードとマージして、次のような新しいノードにすることです。

<Parent>
  <ChildType1>contentD</ChildType1>
  <ChildType2>contentB</ChildType2>
  <ChildType3>contentE</ChildType3>
</Parent>
4

2 に答える 2

3

Linq to XML を使用してソース ドキュメントを解析します。次に、それらの間のユニオンを作成し、要素名でグループ化し、必要に応じてグループの最初/最後の要素を使用して新しいドキュメントを作成します。

このようなもの:

var doc = XElement.Parse(@"
    <Parent>
        <ChildType1>contentA</ChildType1>
        <ChildType2>contentB</ChildType2>
        <ChildType3>contentC</ChildType3>
    </Parent>
");

 var doc2 = XElement.Parse(@"
    <Parent>
        <ChildType1>contentD</ChildType1>
        <ChildType3>contentE</ChildType3>
    </Parent>
");

var result = 
    from e in doc.Elements().Union(doc2.Elements())
    group e by e.Name into g
    select g.Last();
var merged = new XDocument(
    new XElement("root", result)
);

merged現在含まれている

<root>
    <ChildType1>contentD</ChildType1>
    <ChildType2>contentB</ChildType2>
    <ChildType3>contentE</ChildType3>
</root>
于 2013-10-02T07:47:53.017 に答える