4

これは私のxmlファイルです

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

そして、最後の「名前」の子の値= johnであるプロファイルを選択したいのですが、結果には、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 に答える