2011-03-20 37 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