c# - 读取 xml 文件的问题

标签 c# asp.net xml

我在读取和处理 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 的测试节点。为什么?! 不知何故 currentlyselectedtestnode.SelectSingleNode("//a");就像我写的一样工作 Doc.SelectSingleNode("//a");

怎么会?!我怎样才能让它只读取特定测试节点的子节点?ectedtestnode.SelectSingleNode("//c");

最佳答案

在 XPath 中使用 //a 时,您选择了文档中的所有 a 节点。

如果你想要直接 child ,你需要使用currentlyselectedtestnode.SelectSingleNode("a")

参见 XPath Syntax在 w3schools 上:

// - Selects nodes in the document from the current node that match the selection no matter where they are

您可以使用.//a 选择当前 节点下的所有a 节点。这将选择当前节点的所有 a 子节点,无论它们嵌套的深度如何。

关于c# - 读取 xml 文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3475421/

相关文章:

c# - 将具有指数表示法的数字从字符串转换为 double 或十进制

c# - 现有文件部分的锁定检查

asp.net - 无法加载文件或程序集 'CrystalDecisions.Web,版本 = 13.0.2000.0

python:使用元素树处理 XML 项目数组,最好是 "merge"

c# - 通过测验了解 C# 中的嵌套泛型类

javascript - 刷新 Angular 数据asp net webservice

c# - 如何使用 LINQ 从具有重复项的列表中获取第 N 个最大元素?

c# - C# 中的性能和内存消耗

xml - Cocoon lite/XML 和 XSLT 发布框架

c# - 如何强制浏览器下载 xml 文件?