私は非常に汎用的なXML構造で作業しています。ここではすべてが項目です(とにかくこの質問に関係するすべて)。特定の属性を持つ要素の子である祖先を見つける方法は?
私が現在使っているアイテム要素と、探しているノードの親であるアイテム要素を知ることに基づいて、アイテムを見つける必要があります。私は動作しているxpathを持っていますが、かなりリソースが集中しており、よりエレガントで安価なものを探しています。
<root>
<item key="a">
<item key="b">
<item key="c">
<item key="d"/>
</item>
</item>
<item key="e">
<item key="f">
<item key="g"/>
</item>
</item>
</item>
</root>
実際のXMLがされています(それは実際にドキュメントルートの子ではないのですが)
項目キー=ノードは私が探している要素の親
XMLですはるかに深く、はるかに分岐しています。
たとえば、私がkey = g、eまたはfの項目にいる場合、key = eの項目を返す必要があります。私がキーb、c、またはdを持つアイテムにいる場合、キー= bのアイテムを返す必要があります。
私はこのxpathを使用していますが、動作していますが、祖先の子孫軸を上って戻ってきて、必要以上に長い時間がかかるようです。
current()
/ancestor-or-self::item[@key='a']
/item[descendant-or-self::* = current()]
私は私が上だ1)ノードと私が探しているノードの親の2)キー属性を知っていることを念頭に置き、これを行う簡単な方法はありますか?
XMLはSitecoreが生成されたもので、実際にはcurrent()関数を使用していないため、sc_currentitemパラメータを使用して処理を開始する必要がある開始ノードを設定しています。
ありがとうございます。
はすでに(私の目に)、非常に簡単に見えます。私はもっと酷いXPathsを見た。 – jwueller
これは複雑さではなく、処理しているXMLの深さです。恐ろしいことです。私が探しているノードの親は、アイテムの子孫/子孫の膨大な数を持つことができます。私は本当にすべてのブランチに行きたくありません。 –