c# - 使用 C# 查找具有路径和 id 属性值的单个节点

标签 c# xpath xmldocument

假设我有以下 xml,我想获取 id 为 Pkg1 的单个节点的版本属性值,预计为 1.2.3.

<project>
   <nugets id='test'> </nugets>
   <packages>
      <package id='test1' version='1'/>
      <package id='Pkg1' version='1.2.3'/>
      <package id='Pkg1Test' version='4.5.6'/>
   </packages>
</project>

下面是我的尝试,但是目标节点在 OuterXml 的字段中作为目标节点的字符串:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlStr);
string path = "project/packages/package[@id='Pkg1']"; // target node has id=Pkg1
var targetNode = xmlDoc.SelectSingleNode(path);
Console.WriteLine($"{targetNode.OuterXml}"); // prints out the target node as string.

这似乎可行:string version = targetN.Attributes["version"].Value,这是获取属性值的正确方法吗,为什么节点在 targetNode 中.OuterXml?

最佳答案

这是一个工作代码来获得你所需要的:

private const string str = @"
<project>
   <nugets id='test'> </nugets>
   <packages>
      <package id='test1' version='1'/>
      <package id='Pkg1' version='1.2.3'/>
      <package id='Pkg1Test' version='4.5.6'/>
   </packages>
</project>";
        private static void Test()
        {
            var el = XElement.Parse(str);
            var packages = el.Element("packages")?
                .Elements("package")
                .ToList();
            var package = packages?
                .FirstOrDefault(x => x.Attribute("id")?.Value == "Pkg1");
            var id = package?.Attribute("version")?.Value;
            Console.Write(id);
        }

关于c# - 使用 C# 查找具有路径和 id 属性值的单个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57258064/

相关文章:

python - xpath 获取表中的第三个 tr 及更多内容

c# - 我可以强制 .NET XmlDocument 实例尽快释放它占用的内存吗?

c# - 删除 C# 不安全指针

c# - 访问托管在 Windows 服务中的 WCF

xslt - 为什么 XPath 中的索引从 1 而不是 0 开始?

java - 使用 java 使用 selenium webdriver 从 Gmail 收件箱打开邮件

C# XmlDocument 节点

c# - 浏览 XML 子项

c# - 从 C# 可执行文件中扫描 DLL 依赖项

c# - 订单ID分配在哪里?