我在读取和处理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节点,而不管它们嵌套的深度如何。

07-24 09:27