我有一個關於在XPATH中調用「父」軸的XSLT的性能的問題。 我可以通過調用父軸「:: *」或者我把它用「::」和元素的名稱XSLT 1.0:如何去「父」軸
parent::*/MVKE/item/VMSTA='Z2'
或
parent::item/MVKE/item/VMSTA='Z2'
是否重要,如果聰明的表現我使用「*」還是使用節點元素的名稱?這兩個工作,但我想知道有什麼不同。 可以請某人向我解釋?
非常感謝您的幫助和問候, 彼得
我有一個關於在XPATH中調用「父」軸的XSLT的性能的問題。 我可以通過調用父軸「:: *」或者我把它用「::」和元素的名稱XSLT 1.0:如何去「父」軸
parent::*/MVKE/item/VMSTA='Z2'
或
parent::item/MVKE/item/VMSTA='Z2'
是否重要,如果聰明的表現我使用「*」還是使用節點元素的名稱?這兩個工作,但我想知道有什麼不同。 可以請某人向我解釋?
非常感謝您的幫助和問候, 彼得
第一表達式匹配任何元件父。第二個表達式僅在父元素爲item
元素時匹配。這是唯一的區別。我無法想象會有任何顯着的性能影響,因爲兩個節點測試都可以在同一時間執行。
注意這條線從XPath 1.0 spec:
每除根節點其他節點只有一個父,這是 任一元素節點或根節點。
在實踐中,這意味着parent::*
匹配任何父除了根元素。
爲了演示,考慮這個簡單的例子文件:
<root>
<one/>
<item>
<two/>
</item>
</root>
然後:
//parent::*
將讓你的root
和item
元素(每父節點是一個元素)
//parent::item
將僅返回item
元素(th e只有母元素是item
)
//parent::node()
會讓你成爲root
的父母(即,根節點),以及在root
和item
元素
這是不一樣的,但我懷疑會有一個顯著的性能差異。
使用*
接受任何父元素,使用名稱將要求父母具有此名稱,否則您將獲得一個空的節點集。因此,如果速度更快,它可能是*
之一。
另一種選擇是使用parent::node()
,或它的短形式..
什麼簡單:
<xsl:value-of select="../node()"/>
給你的直接父。那麼,是否有原始問題在另一種方法中的性能優勢?
你問還是回答? –