0

多数のデータ項目を含むXDocumentがあります。

データ項目の非常に小さなコレクションを含む別のXDocumentがあります。小さいドキュメントのデータ項目には、一致するパスにある大きいドキュメントの対応する要素があります。

私がやりたいのは、小さいドキュメントをループすることです。要素ごとに、対応する値が小さいドキュメントの値に置き換えられるように、大きいドキュメントを更新したいと思います。

たとえば、より大きなドキュメント:

<Rootelement>
  <Desktop>
    <A>
      <El1 label="original blah" />
    </A>
  </Desktop>
  <Desktop>
    <B>
      <El2 />
    </B>
  </Desktop>
  <Desktop>
    <C>
      <El3 label="I'm the label" tooltip="I'm the tooltip" />
    </C>
  </Desktop>
</Rootelement>

小さいドキュメント:

<Rootelement>
  <Desktop>
    <C>
      <El3 label="The NEW Label" tooltip="The NEW Tooltip" />
    </C>
  </Desktop>
</Rootelement>

パスの要素を取得し、大きいドキュメントの同じパスの要素を小さいドキュメントの要素に置き換えたいRootelement/Desktop/C/El3ので、大きいドキュメントは次のようになります。

<Rootelement>
  <Desktop>
    <A>
      <El1 label="original blah" />
    </A>
  </Desktop>
  <Desktop>
    <B>
      <El2 />
    </B>
  </Desktop>
  <Desktop>
    <C>
      <El3 label="The NEW Label" tooltip="The NEW Tooltip" />
    </C>
  </Desktop>
</Rootelement>

これを行うための最良の方法は何ですか?

4

1 に答える 1

4
var xDocBig = XDocument.Parse(xmlBig);
var xDocSmall = XDocument.Parse(xmlSmall);

var eBig = xDocBig.XPathSelectElement("/Rootelement/Desktop/C");
var eSmall = xDocSmall.XPathSelectElement("/Rootelement/Desktop/C");

eBig.ReplaceWith(eSmall);

var newXml = xDocBig.ToString();
于 2012-10-18T14:07:37.880 に答える