2011-03-20 76 views
1

我上運行,在一個點把我目前的節點在下面的「item」元素在樹的XML的XSLT:使用母公司點符號在XPath查找XML樹的另一個分支

host/device/item 

我已經通過實驗發現,以下xpath將xslt備份到XML樹的「主機」分支,然後成功查找「主機」元素的「觸發器」宏子元素。

../.././setting/trigger 

它的工作原理,但xpath語法對我來說似乎很奇怪。當您從右向左讀取.時,點父母符號../../.有意義。但是,如果您從左至右閱讀,子女詞組符號setting/trigger纔有意義。整個的XPath「最後的意思」相當於說:

host/setting/trigger 

是否總是真正與XPath(或然而,許多家長../水平是)中間../.節總是被忽略,以創建最終含義host/device/trigger

+0

我不明白你的意思,當你說的表達部分是有意義的RtoL和其他有意義的LtoR。你能詳細說明嗎? – 2011-03-20 19:02:09

+1

中間'/ .'是不必要的。 – 2011-03-20 20:16:03

+0

謝謝,亞歷杭德羅。我剛剛嘗試過「../../setting/trigger」,它的工作方式和「../.././setting/trigger」一樣好, – Don 2011-03-21 16:52:16

回答

1

由於.表示自我,您可以將其解釋爲被忽略。 ./././././././*表示與./*相同,表示與*相同。

關於閱讀的XPath,將它分解從上下文節點host/device/item

../.././setting/trigger中,/字符分隔節點測試,因此,LtoR:

..你現在是在主機/設備,

..你現在是在主機

.你仍然在主機

setting你現在是在主機/設置

trigger你現在是在主機/設置/觸發

如果你讀它RTOL,那麼你必須明白,而不是跟隨節點的測試,你是讀取每個節點測試用相反的意思,和你的上下文是要結束了,所以:

host/setting/trigger(你想要的終點)

trigger(讀作..),你現在是在host/setting

setting(再次,..),你現在是在主機

..),你仍然在主機

..(讀作*)你可能現在是在主機/設備

..(讀作*)你可能現在在主機/設備/項目

+0

謝謝Paul。我想出的最好的東西是讓我的頭繞着「走上樹」,然後「走下兄弟姐妹」,將xpath分成三個「短語」: 「../../。」是當前節點的祖父母 「設置」是祖父母的孩子 「觸發器」是祖父母的孫子 我只是提醒自己,一切都在「。」的左邊。在子元素被檢查之前,首先是樹的躍起。 – Don 2011-03-21 16:42:40

+0

只需閱讀每個單獨的節點測試,即5個短語。 '..'表示父母,'.'表示自我,你的例子中的標識符是子元素。例如,'*/* /。/ setting/trigger'不涉及樹的跳躍。 – 2011-03-21 16:55:48

+0

'/ army /營/ squad.0'是什麼意思?這是否意味着「軍隊」對象的第一個元素? – bouncingHippo 2015-09-24 19:45:35