如何找到具有特定属性的元素的子元素的祖先或自我?

Jam*_*ord 4 xslt xpath sitecore

我正在使用一个非常通用的XML结构,其中所有内容都是一个项目(无论如何,所有与此问题相关的内容).

基于知道我当前正在使用的item元素以及作为我正在寻找的节点的父元素的item元素,我需要找到一个项目.我有一个工作的xpath,但它是相当资源密集型的,我正在寻找更优雅,更便宜的东西.

item key =一个节点是我正在寻找的元素的父节点(虽然它实际上不是文档根的子节点)

XML:

<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>
Run Code Online (Sandbox Code Playgroud)

实际的XML更深入,分支更多.

因此,例如,如果我使用key = g,e或f在项目上,我需要使用key = e返回项目.如果我在带有键b,c或d的项目上,我需要使用key = b返回项目.

我正在使用这个xpath,它正在工作,但是上升然后回到祖先 - 后代轴似乎比我需要的旅程更长.

current()
   /ancestor-or-self::item[@key='a']
      /item[descendant-or-self::* = current()]
Run Code Online (Sandbox Code Playgroud)

是否有一种更简单的方法,记住我只知道1)我所在的节点和2)我正在寻找的节点的父节点的键属性?

仅仅是为了细节:XML是Sitecore生成的,我实际上并没有使用current()函数,我正在使用sc_currentitem参数来设置我需要开始处理的起始节点.

提前致谢.

小智 6

使用:

ancestor-or-self::*[parent::item[@key='a']]
Run Code Online (Sandbox Code Playgroud)