2016-09-27 8 views
2

linqをxmlに使用するのは初めてですが、結果を反復しようとして問題があります。私のXML文書には、単一の親ノードにネストされた同じ名前の複数のノードがあります。LINQを使用してXML内の各子で重複している値を確認します

サンプルXMLは次のとおりです。

<commercial> 
    <listingAgent>1</listingAgent> 
    <listingAgent>2</listingAgent> 
    <listingAgent>1</listingAgent> 
</commercial> 
<commercial> 
    <listingAgent>1</listingAgent> 
    <listingAgent>2</listingAgent> 
    <listingAgent>3</listingAgent> 
</commercial> 

したがって、各商業用タグのユニークな物件エージェント値があるはずです。もしそうでなければ、私はエラーを起こす必要があります。

実際のXMLは非常に複雑で、これらのタグはどこにもありません。だから私は、私は次のコード

foreach (XElement e in root.Descendants("listingAgent")) 
{ 
    listerror.Add(e.Value); 
} 

if(listerror.Count != listerror.Distinct().Count()) 
    Then show error 

を試してみましたが、私はこのループは、各商用のために実行する必要があり、これらに横断し、その後、duplciates

を検索する必要があります。

答えて

2

まず、すべての商用ノードを選択してから、ノードごとにSelectを使用してエージェント値のリストを取得すると、リストのリストが得られます。最後に、以前と同じ条件を適用して、今はエージェントのリストごとに:

var result= xdoc.Descendants("commercial") 
       .Select(c=>c.Descendants("listingAgent").Select(e=>e.Value)); 
if(result.Any(e=>e.Count()!= e.Distinct().Count()) 
{ 
    //error 
} 
+0

こんにちは..私の質問では明らかにされていません申し訳ありませんが、listingAgentは商業の直接の子ではありません。これはまだ動作しますか? –

+0

まあ、代理店が商業の中にいる場合、代わりに 'Elements'メソッドの代わりに' Descendants'を使用してください – octavioccl

+0

これはちょっと感謝します..私は別の関連する質問をするかもしれません..タグが重複しているかどうかを確認する方法?値だけでなくタグ名も?コマーシャルタグ内に複数のリスティングエージェントタグがある場合にエラーをスローする例 –

関連する問題