在xpath中使用父点表示法在XML树中查找另一个分支

在xpath中使用父点表示法在XML树中查找另一个分支,xpath,notation,Xpath,Notation,我在一个XML上运行xslt,该XML将当前节点放在树中的以下“item”元素: host/device/item 我通过实验发现,下面的xpath将xslt带回XML树的“主机”分支,然后成功地找到“主机”元素的“触发器”子元素 它可以工作,但xpath语法对我来说似乎很奇怪。当您从从右到左阅读时,点父符号./../.是有意义的。但是,只有从左到右阅读时,子短语表示法setting/trigger才有意义。整个xpath的“最终含义”相当于: host/setting/trigger xp

我在一个XML上运行xslt,该XML将当前节点放在树中的以下“item”元素:

host/device/item
我通过实验发现,下面的xpath将xslt带回XML树的“主机”分支,然后成功地找到“主机”元素的“触发器”子元素

它可以工作,但xpath语法对我来说似乎很奇怪。当您从
从右到左阅读时,点父符号
./../.
是有意义的。但是,只有从左到右阅读时,子短语表示法
setting/trigger
才有意义。整个xpath的“最终含义”相当于:

host/setting/trigger

xpath中间的
./.
部分(或者不管它有多少个父级
./
级别)总是被忽略以创建最终含义
主机/设备/触发器

因为
意味着自我,您可以将其解释为被忽略
/*
的意思与
/*
相同,意思与
*
相同

关于读取XPath,请从上下文节点
host/device/item

。/.././setting/trigger
中,
/
字符分隔节点测试,因此,LtoR:

您现在在主机/设备上

您现在是主机

您仍在主机上

设置
您现在是主机/设置

trigger
您现在是主机/设置/触发器

如果您阅读RtoL,那么您必须理解,您阅读的不是以下节点测试,而是具有相反含义的每个节点测试,并且您的上下文是您想要结束的地方,因此:

主机/设置/触发器
(您所需的端点)

触发器
(读作
),您现在处于
主机/设置

设置
(同样,
),您现在是主机

),您仍在主机上

(读作
*
)您现在可能在主机/设备上


(读作
*
)你现在可能在主机/设备/项目上了

我不明白你说的是什么意思,表达的一部分是RtoL,另一部分是LtoR。你能详细解释一下吗?中间的
/.
没有必要。谢谢你,亚历杭德罗。我刚试过“../../setting/trigger”,效果和“../../setting/trigger”一样好,谢谢,保罗。我想到的最好的办法是先“沿着树走”,然后“沿着兄弟分支走”,将xpath分为三个“短语”:“../...”是当前节点的祖父母“设置”是祖父母“触发器”的子节点是祖父母的孙子,我只需提醒自己,“.”左边的所有内容都是先跳过树,然后再检查子元素。只需阅读每个节点测试,即5个短语<代码>。表示父元素,
表示self,示例中的标识符是子元素<代码>*/*/./设置/触发,例如,不涉及跳树。什么是
/陆军/营/班.0
的意思?这是否意味着
陆军
对象的第一个元素?
host/setting/trigger