<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>
<Results>
<Data1>
<a>-50</a>
<b>600</b>
</Data1>
<Data2>
<MoreData>
<c>2</c>
<d>300</d>
</MoreData>
<MoreData>
<c>6</c>
<d>900</d>
</MoreData>
</Data2>
</Results>
</OverallReport>
我有一个XML文档,例如上面的文档,其中包含任意数量的“结果”节点和任意数量的“更多数据”节点。我必须找到包含两个特定值(例如a = -50,b = 600)的结果节点,并且在该节点内,如果'c'等于特定值,则找到'd'的值。同样,有多个结果节点可能具有相同的a,b和c,我将需要找到“ x”一个。因此,如果(a = -50,b = 600,c = 6,x = 0),我要寻找的d的值为500。如果(a = -50,b = 600,c = 6,x = 1)我正在寻找的d的值为900。
我已经发布了一个相关的问题,并给出了有效的答案,但这是更高级的内容,因此我决定创建一个新问题。我目前找到d的方式:
string wantedA = "-50";
string wantedB = "600";
string wantedC = "6";
string x=1;
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);
再次,我是Xml的新手,任何帮助或提示将不胜感激!
首先,您的xml中存在一些错误,应该是:
<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> // was <Data2> - slash added
</Results>
<Results>
<Data1>
<a>-50</a>
<b>600</b>
</Data1>
<Data2>
<MoreData>
<c>2</c>
<d>300</d>
</MoreData>
<MoreData>
<c>6</c>
<d>900</d>
</MoreData>
</Data2> // was <Data2> - slash added
</Results>
</OverallReport>
其次,您必须将的类型x
从更改string
为int
:
string wantedA = "-50";
string wantedB = "600";
string wantedC = "6";
int x = 1; // or 0
最后,您应该找到所有符合条件的节点,然后选择一个取决于以下条件的节点x
:
XmlNodeList nodes = doc.SelectNodes(xpath);
Console.WriteLine(nodes[x].InnerText);
因此,您的代码应为:
string wantedA = "-50";
string wantedB = "600";
string wantedC = "6";
int x = 1; // or 0
string xpath = string.Format("OverallReport/Results[Data1/a={0} and Data1/b={1}]/Data2/MoreData[c={2}]/d",
wantedA, wantedB, wantedC);
XmlNodeList nodes = doc.SelectNodes(xpath);
Console.WriteLine(nodes[x].InnerText);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句