XSLT 1.0:如何寻找“父”轴

Pet*_*ter 3 xslt xpath parent

我有一个关于在 XPATH 中调用“父”轴的 XSLT 性能的问题。我可以使用“::*”调用父轴,或者使用“::”和元素名称调用它

parent::*/MVKE/item/VMSTA='Z2'
Run Code Online (Sandbox Code Playgroud)

或者

parent::item/MVKE/item/VMSTA='Z2'
Run Code Online (Sandbox Code Playgroud)

如果我使用“*”或使用节点元素的名称,这对性能有影响吗?两者都有效,但我想知道有什么区别。请有人向我解释一下吗?

非常感谢你的帮助和最好的问候,彼得

Way*_*ett 5

第一个表达式匹配任何元素父元素。第二个表达式仅在父item元素是元素时匹配。这是唯一的区别。我无法想象任何显着的性能影响,因为两个节点测试都可以在恒定时间内执行。

请注意XPath 1.0 规范中的这一行:

除了根节点之外的每个节点都有一个父节点,它要么是元素节点,要么是根节点。

实际上,这意味着parent::*匹配除根元素之外的任何父元素。

为了演示,请考虑这个简单的示例文档:

<root>
    <one/>
    <item>
        <two/>
    </item>
</root>
Run Code Online (Sandbox Code Playgroud)

然后:

  • //parent::*将为您提供rootitem元素(作为元素的每个父节点)

  • //parent::item将仅返回item元素(唯一的父元素是item

  • //parent::node()将使您成为root(即根节点)的父节点以及rootitem元素