这是我的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']");
但没有意义。
更新: 我的踪迹是正确的,其中只有一个语法错误。谢谢大家
答案 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;
}