我执行XSLT转换,我在模板中使用XPATH从XML获取信息,此时没什么特别的,但是:
当我浏览“ firstEngine ”元素并浏览“引擎时,我尝试获取节点” Aircraft “的ID “元素(而不是”引擎“元素)。 我搜索XPATH表达式以获得第一个父元素的“ id ”,其中“ xsi:type ”的值为“ Jet ”无论他父母的水平如何。
我用这个表达式尝试没有成功:
../Aircraft[xsi:type="Jet"]/@id
<Aircraft xsi:type="Jet" id="4">
<MTOW>0</MTOW>
<firstEngine>
<nbFans>2</nbFans>
<name>turbofanengine</name>
</firstEngine>
<engines>
<Engine>
<nbFans>2</nbFans>
<name>turbofanengine</name>
</Engine>
</engines>
<name>jet</name>
</Aircraft>
编辑:#michael.hor257k您的表达非常好,我使用Editix来测试xpath实验,它似乎有问题,我不得不重新启动editix以使其工作。
谢谢你!
答案 0 :(得分:1)
我猜测你想要使用:
ancestor::Aircraft/@id
这可以从Aircaft
的任何后代的上下文中起作用。
我遗漏了[@xsi:type="Jet"]
谓词,因为似乎一个节点不太可能有一个Aircaft
个祖先。但这只是我的一个推测。
答案 1 :(得分:0)
您想要选择一个属性,因此../Aircraft[xsi:type="Jet"]/@id
应为../Aircraft[@xsi:type="Jet"]/@id
。这应该与<xsl:template match="firstEngine"><xsl:value-of select="../Aircraft[@xsi:type="Jet"]/@id"/></xsl:template>
一起使用。对于其他元素,您需要../../Aircraft[@xsi:type="Jet"]/@id1
。