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; }