2016-04-26 17 views
2
<OverallReport> 
    <Results> 
     <Data1> 
      <a> -30 </a> 
      <b> 400 </b> 
     </Data1> 
     <Data2> 
      <MoreData> 
        <c> 2 </c> 
        <d> 100 </d> 
      </MoreData> 
      <MoreData> 
        <c> 4 </c> 
        <d>200</d> 
      </MoreData> 
     </Data2> 
    </Results> 
    <Results> 
     <Data1> 
      <a> -50 </a> 
      <b> 600 </b> 
     </Data1> 
     <Data2> 
      <MoreData> 
        <c> 2 </c> 
        <d> 200 </d> 
      </MoreData> 
      <MoreData> 
        <c> 6 </c> 
        <d>500</d> 
      </MoreData> 
     <Data2> 
    </Results> 
</OverallReport> 

上記のようなXML文書があります。これには、任意の数の結果ノードと任意の数のMoreDataノードが含まれています。 'c'が特定の値と等しい場合、2つの特定の値(たとえばa = -50、b = 600)を含む結果ノードを見つけ、そのノード内に 'd'の値を見つける必要があります。さまざまな要素値に基づいてxpathを使用してxmlを検索します。

したがって、a = -50、b = 600、c = 6の場合、d(これは兄弟)の値は何ですか。

私はXPathを使用してこれを実行しようとしています。これまでのところ、ここで私が持っているものです。

var resultsNodes = document.SelectNodes(“OverallReport/Results”); 
var data1ANodes = document.SelectNodes(“OverallReport/Results/Data1/a”); 
var data1BNodes = document.SelectNodes(“OverallReport/Results/Data1/b”); 

var data2CNodes = document.SelectNodes(“OverallReport/Results/Data2/c”); 
var data2DNodes = document.SelectNodes(“OverallReport/Results/Data2/d”); 

string wantedA = “-50”; 
string wantedB = “600”; 
string wantedC = “6”; 
string wantedD = "500"; 

for (int i=0; i<resultsNodes.Count; i++) 
{ 
    if (data1Anodes[i].InnerXml == wantedA && data1Bnodes[i].InnerXml == wantedB) 
    { 
     //do something. 
     //the goal is to compare the output of D with wantedD 
     i = resultsNodes.Count; 
    } 
} 

すべてのD'sのためのXPathが同じであるように私が試してみましたすべては、私は必要なものを私に与えるものではありません。私はXMLに新しいので、多分私は見落としているものがあります。

答えて

2
string wantedA = "-50"; 
string wantedB = "600"; 
string wantedC = "6"; 

string xpath = string.Format("OverallReport/Results[Data1/a={0} and Data1/b={1}]/Data2/MoreData[c={2}]/d", 
    wantedA, wantedB, wantedC); 

XmlNode nodeD = document.SelectSingleNode(xpath); 
Console.WriteLine(nodeD.InnerText); 
+0

私はあなたが大好きです、アレクサンダー!これは私が思ったよりずっと簡単でした。ありがとうございました!!!!! – Faye

+0

Btw、これに追加のレイヤーがあるので、私は新しい質問を投稿しました(複数のa、b、cの一致があり、x番目のものを見つけなければなりません)。 – Faye

関連する問題