如何根据标签的属性名称选择两个标签之间的 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 中根据类标签和属性名称抓取数据