4

这是我的 xml 文件

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

我想选择最后一个“名称”子值=约翰的配置文件,结果应该包含id=8405的配置文件,只有它可以评估这个的xpath?

这是我的试验:

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

但这没有意义。

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

4

2 回答 2

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元素的最后一个元素。namejohn

另一方面,如果您想要返回最后一个元素的值为 的所有元素,那么您的 XPath 应该已经可以工作了:namejohn

var nodes = doc.XPathSelectElements("/profiles/profile[name[last()]='john']");
foreach (var node in nodes)
{
    Console.WriteLine(node.Attribute("id").Value);
}
于 2012-11-22T08:03:11.800 回答
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;
}
于 2012-11-22T08:16:34.757 回答