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

这是我的xml文件

  john mark   john   

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

这是我的试用期:

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

但它没有意义。

更新:我的路径是正确的,其中只有语法错误。 谢谢大家

您可以使用连续的[...]应用多个索引操作:

 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 

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

另一方面,如果你想要返回name元素值为john 所有元素 ,那么你的XPath应该已经工作了:

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

您也可以尝试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; }