我在读取和处理xml文件时遇到问题,目前无法解决。
xml具有以下结构:
<root>
<test id="1">
<a></a>
<b></b>
<c></c>
</test>
<test id="2">
<a></a>
<b></b>
<c></c>
</test>
<test id="3">
<a></a>
<b></b>
<c></c>
</test>
</root>
XmlDocument Doc; int currentid=1;
XmlNode currentlyselectedtestnode =
Doc.SelectNodes("//test[@id = '" +
currentid.ToString() + "']");
string a = currentlyselectedtestnode.SelectSingleNode("//a");
string b = currentlyselectedtestnode.SelectSingleNode("//b");
string c = currentlyselectedtestnode.SelectSingleNode("//c");
不幸的是,“ currentlyselectedtestnode.SelectSingleNode(“ // a”)“将读出所有的“ a”节点,而不仅读出属于id为1的测试节点。
当前以某种方式选择了testnode.SelectSingleNode(“ // a”);就像我写了Doc.SelectSingleNode(“ // a”)一样工作;
怎么来的 ?!我怎样才能让它只读取特定测试节点的子节点?ectedtestnode.SelectSingleNode(“ // c”);
最佳答案
在XPath中使用//a
时,您正在选择文档中的所有a
节点。
如果您想要直子,则需要使用currentlyselectedtestnode.SelectSingleNode("a")
。
请参阅w3schools上的XPath Syntax:
//
-从当前节点中选择匹配选择的节点,无论它们在何处
您可以使用a
选择当前节点下的所有.//a
节点。这将选择当前节点的所有子a
节点,而不管它们嵌套的深度如何。