1

2 つの異なるファイルから 2 つの XElements をロードします。1 つはデフォルト ファイルで、もう 1 つはライブ XML です。基本的に、2 つの XElements を比較し、defaultfile ではなくライブ ファイルにあるすべての要素のコレクションを取得する方法を知る必要があります。

値のチェックは気にしません。ライブ ファイルにデフォルト ファイルにない要素があるかどうかだけを気にします。

基本的に、私は 2 つの Web.config ファイルを比較しています。ユーザーが製品をアップグレードするときは、web.config をチェックして、追加した要素のうちテンプレートにない要素を見つけ、それらをテンプレートに追加してから配置する必要があります。そしてそれらを上書きします。

4

1 に答える 1

2

これを試して:

var addedNames = new HashSet<string>(
    liveXml.Elements().Select(e => e.Name).Except(
        defXml.Elements().Select(e => e.Name)
    )
);
var addedElements = liveXml
    .Elements()
    .Where(e => addedNames.Contains(e.Name))
    .ToList();

このアプローチでは、 にliveXml存在しない の要素名のリストを作成しdefXml、それらをセットに入れ、そのセットを使用してliveXmlの要素をフィルタリングします。

削除された要素については、 に渡すオペランドの順序を逆にしてExcept、 をフィルター処理しますdefXml

var droppedNames = new HashSet<string>(
    defXml.Elements().Select(e => e.Name).Except(
        liveXml.Elements().Select(e => e.Name)
    )
);
var droppedElements = defXml
    .Elements()
    .Where(e => addedNames.Contains(e.Name))
    .ToList();
于 2012-09-05T14:27:27.083 に答える