【问题标题】:Using C# to find a single node with its path and id attribute value使用 C# 查找具有路径和 id 属性值的单个节点
【发布时间】:2019-07-29 16:39:29
【问题描述】:

假设我有以下xml,我想获取id为Pkg1的单个节点的version属性的值,预计为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

【问题讨论】:

  • 你应该使用XDocument公开的现代APIS
  • 你忘了大括号:$"{targetNode.OuterXml}"

标签: c# xpath xmldocument


【解决方案1】:

这里有一个工作代码来获得你需要的东西:

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);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多