如何返回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)

如何返回XML节点内部文本,将其与相同的后代进行比较

你不想试试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'...
}