2

特定のノードの先祖を調べようとしています。これを「NodeA」と呼びましょう。「NodeA」ノードのリストを取得し、その祖先を検索して特定の属性値を確認したいと考えています。すべての「NodeA」ノードを取得するコードは次のとおりです。

String xPathExpression = "//*[local-name()='NodeA']";
XPathNodeIterator nodeSet = (XPathNodeIterator)navigator.Evaluate(xPathExpression);
foreach (XPathNavigator item in nodeSet)
{
      // Iterate through ancestors in here.
}

「// ここで祖先を反復処理」領域では、式を使用してノードを評価し、次の方法で祖先のリストを取得できます (「NodeA」ごとに)。

XPathNavigator item;
var ancestorExpression = string.Format("//*[name()='{0}']/ancestor-or-self::*", item.Name);
XPathNodeIterator ancestors = (XPathNodeIterator)navigator.Evaluate(ancestorExpression);

ただし、これは冗長に思えます。元の xml と XPathNavigator インスタンスがあるため、ナビゲーターを介して式を評価することなく、その時点で先祖を取得することはできませんか? 次のようなもの ( item は XPathNavigator 型です):

item.GetAncestors();

また

Helper.GetAncestors(fullXML, item)

アイテムに SelectAncestors メソッドがあることに気付きましたが、それを機能させることができませんでした。しかし、それがそれである場合、例は大歓迎です

<NodeAGrandDaddy>
   <NodeADaddy>
      <NodeA>
      <NodeA/>
   <NodeADaddy/>
<NodeAGrandDaddy/>
4

1 に答える 1

2

わかりました、まあ、Selectメソッドをancestor-or-self::*で使用できる可能性があります。つまり:

item.Select("ancestor-or-self::*")
于 2014-02-11T00:26:53.880 に答える