2016-05-30 63 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

相關問題