如何根据标签的属性名称选择两个标签之间的 xml 文件中的所有节点?

Posted

技术标签:

【中文标题】如何根据标签的属性名称选择两个标签之间的 xml 文件中的所有节点?【英文标题】:How do I select all of the nodes in an xml file between two tags, depending on attribute name of the tag? 【发布时间】:2020-07-26 17:48:28 【问题描述】:

我想选择组标签之间具有我想要的名称的所有节点,但我不确定如何执行此操作。下面是一个示例,我希望选择组名称为“DefaultSettings”的每个节点。

<group name="DefaultSettings">
    <tag></tag>
    <tag></tag>
    <tag></tag>
    <tag></tag>
    <tag></tag>
    <tag></tag>
</group>

<group name="NewSettings">
    <tag></tag>
    <tag></tag>
    <tag></tag>
    <tag></tag>
    <tag></tag>
    <tag></tag>
</group>

我目前正在尝试使用 XmlDocument 对象来选择所有节点,但我不确定如何让 Xpath 正常工作,因为我不想选择名为 NewSettings 的其他组。任何关于使用什么 Xpath 公式或任何其他方式的建议都会受到欢迎。

编辑:我已经通过结合使用 freeformatter.com/xpath-tester.html 和一般的混乱来解决这个问题。抱歉,我没有像我想象的那样研究它,但是 XPath 非常令人困惑,现在我对如何使用它有了更多的了解。

【问题讨论】:

不会研究...使用这个freeformatter.com/xpath-tester.html和这个w3schools.com/xml/xpath_intro.asp 你的意思是//group[@name='DefaultSettings']/node()? 查看我的编辑以获取回复 【参考方案1】:

假设这是你的 XML

<groups>
   <group name="DefaultSettings">
      <tag />
      <tag />
      <tag />
      <tag />
      <tag />
      <tag />
   </group>
   <group name="NewSettings">
      <tag />
      <tag />
      <tag />
      <tag />
      <tag />
      <tag />
   </group>
</groups>

你可以试试这样的:

XmlDocument xml = new XmlDocument();
xml.LoadXml(str);  // suppose that str string contains "<groups>...</groups>"

XmlNodeList xnList = xml.SelectNodes("/groups/group[@name='DefaultSettings']");
foreach (XmlNode xn in xnList)

  Console.WriteLine(xn.InnerText);

【讨论】:

以上是关于如何根据标签的属性名称选择两个标签之间的 xml 文件中的所有节点?的主要内容,如果未能解决你的问题,请参考以下文章

Pyhton3 操作xml文件-根据标签名称输出标签的文本值

C# - 如何将复杂的 json 转换为 XML,并将名称和值属性转换为标签

如何在 Dart/Flutter 中根据类标签和属性名称抓取数据

如何在python中根据xml标签获取文本?

Python通过lxml库遍历xml通过xpath查询(标签,属性名称,属性值,标签对属性)

合并两个 XML 文件并添加缺少的标签和属性