如何返回XML节点内部文本,将其与相同的后代进行比较
本文关键字:后代 比较 返回 何返回 XML 文本 内部 节点 | 更新日期: 2023-09-27 18:13:45
我有一个这样的xml文件:
<Tests>
<Test>
<Name>Test1</Name>
<Type>A</Type>
</Test>
<Test>
<Name>Test2</Name>
<Type>A</Type>
</Test>
<Test>
<Name>Test3</Name>
<Type>B</Type>
</Test>
</Tests>
我如何返回一个字符串数组或列表,它只包含Test
的名称,它们的类型是A
?
我正在尝试这个代码,但没有成功!
XPathNodeIterator it = nav.Select("/Tests/Test[Type = 'A']/Name)
你不想试试linq2xml吗?
using System.Xml.Linq;
using System.Linq;
///////////
XElement root = new XElement("Tests",
new XElement("Test",
new XElement("Name", "Test1"),
new XElement("Type", "A")),
new XElement("Test",
new XElement("Name", "Test2"),
new XElement("Type", "A")),
new XElement("Test",
new XElement("Name", "Test3"),
new XElement("Type", "B")));
string[] result = (from xe in root.Elements()
where xe.Element("Type").Value.Equals("A")
select xe.Element("Name").Value).ToArray();
问题中的XPath表达式匹配Name
元素。如果要匹配Test
元素,则必须删除/Name
部分:
XPathNodeIterator it = nav.Select("/Tests/Test[Type = 'A']);
如果你想使用XPathNavigator
,从那里,你可以调用MoveToChild()将导航器指向Name
元素:
foreach (XPathNavigator elemNav in it) {
elemNav.MoveToChild("Name", "");
string name = elemNav.Value;
// Do something with 'name'...
}