2016-05-30 42 views
0

我执行XSLT转换和我使用的模板XPATH摆脱XML的信息,在这一点上,没有什么特别,但:在其属性的任何级别的节点如何选择父

我试图得到的ID节点“飞机”当我浏览“firstEngine”元件,当我浏览“引擎”元件(而不是“引擎”元素)。 我搜索了XPath表达式来获得的第一个父元素女巫“ID”价值“XSI:类型”是“喷气”没有他父母的水平的问题。

我想没有这个表情的成功:

../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 expessions,它似乎被窃听,我不得不重新启动editix使其工作。 Tks给你!

+0

“*无论他父母的水平如何。”*父母*的水平总是比当前节点高一级。也许你的意思是*祖先*? –

+0

http://stackoverflow.com/help/someone-answers –

回答

1

猜测要使用:

ancestor::Aircraft/@id 

这将从任何后裔Aircaft的环境中工作。

我已经遗漏了[@xsi:type="Jet"]谓词,因为似乎不可能有一个节点会有多个Aircaft祖先。但这只是我的猜测。

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