xpath选择具有最后子值的元素

时间:2012-11-22 07:58:42

标签: c# xml xpath

这是我的xml文件

<profiles>
 <profile id='8404'>
  <name>john</name>
  <name>mark</name>
 </profile>
 <profile id='8405'>
  <name>john</name>
 </profile>
</profiles>

并且我想选择最后一个“name”子值= john的配置文件,结果应该只包含id = 8405的配置文件 什么是xpath可以评估这个?

这是我的试用版:

     var filterdFile = profilefileXML.XPathSelectElements("/profiles/profile[name[last()]='john']");

但没有意义。

更新: 我的踪迹是正确的,其中只有一个语法错误。谢谢大家

2 个答案:

答案 0 :(得分:3)

您可以使用后续[...]

应用多个索引操作
var doc = XDocument.Parse(xml); //the xml from your question

var node = doc.XPathSelectElement("/profiles/profile[name='john'][last()]");

Console.WriteLine(node.Attribute("id").Value); //outputs 8405

这将返回包含元素profile的最后一个name元素,其值为john

如果您想要返回所有元素,其中name元素的值为john,那么您的XPath应该已经有效了:

var nodes = doc.XPathSelectElements("/profiles/profile[name[last()]='john']");
foreach (var node in nodes)
{
    Console.WriteLine(node.Attribute("id").Value);
}

答案 1 :(得分:0)

您也可以尝试LINQ

XDocument xDoc = XDocument.Load("data.xml");
var matches = xDoc.Descendants("profile")
              .Where(profile => XElement.Parse(profile.LastNode.ToString()).Value == "john");

您可以使用foreach

访问xml数据
foreach(XElement xEle in lastEle)
{
   var xAttribute = xEle.Attribute("id");
   if (xAttribute != null)
   {
       var id = xAttribute.Value;
   }
   var lastName = XElement.Parse(xEle.LastNode.ToString()).Value;
}