2012-12-07 65 views
0

XML充分利用子節點XSLT第三級父節點加入時屬性

<root> 
     <Algemeen> 
      <foto> 
       <foe> 
        <fee> 
         <img src="www.blah.com/sample.jif"></img> 
        </fee> 
       </foe> 
       </foto> 
     </Algemeen> 
    </root> 

XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
     <xsl:template match="/"> 
      <result> 
     <xsl:apply-templates select="/root/Algemeen/foto/foe/fee/img"/> 
      </result> 
     </xsl:template> 

    <!--specific template match for this img --> 
     <xsl:template match="/root/Algemeen/foto/foe/fee/img"> 
      <xsl:copy> 
       <xsl:attribute name="width">100</xsl:attribute> 
       <xsl:apply-templates select="@*|node()" /> 
       </xsl:copy> 
     </xsl:template> 

    <!--Identity template copies content forward --> 
     <xsl:template match="@*|node()"> 
      <xsl:copy> 
       <xsl:apply-templates select="@*|node()"/> 
      </xsl:copy> 
     </xsl:template> 

    </xsl:stylesheet> 

我添加的屬性通過模板「IMG」標籤,我怎樣才能得到整個「foto」節點?這是「@ * |節點()」是指第二級父節點「仇敵」?

觀看鏈接:

+0

那麼,什麼是XML文檔,到底是什麼導致你要得到什麼?請編輯問題並添加這個重要的缺失信息。 –

回答

0

是這個 「@ * |節點()」 是指第二級父節點 「敵人」?

不!這是指子節點和屬性..

如何複製<img>添加屬性,以其宏大的父母​​一起?

在您的代碼中,您通過說<xsl:template match="/">來匹配根節點,並且您將其重命名爲<result>。下面你說<xsl:apply-templates select="/root/Algemeen/foto/foe/fee/img"/> ..所以這將跳過層次結構,並做什麼<xsl:template match="/root/Algemeen/foto/foe/fee/img">說..

你的<xsl:template match="/root/Algemeen/foto/foe/fee/img">模板看起來很完美!所有你需要的是低於更正!

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <result> 
     <xsl:apply-templates select="/root/Algemeen/foto"/> 
    </result> 
    </xsl:template> 

    <xsl:template match="foto"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <!--specific template match for this img --> 
    <xsl:template match="/root/Algemeen/foto/foe/fee/img"> 
    <xsl:copy> 
     <xsl:attribute name="width">100</xsl:attribute> 
     <xsl:apply-templates select="@*|node()" /> 
    </xsl:copy> 
    </xsl:template> 

    <!--Identity template copies content forward --> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

如果您要訪問的父級或上級試試這個:

<xsl:for-each select="ancestor::foto"> 
+0

謝謝。有用 :) 。我的最後一種方法是與此相反的比例,我無法找到一種方法來獲得第一個孩子,然後獲得父母。 – iCeR

+0

@iCeR,歡迎光臨!好。您提到的反向XPath方法不被鼓勵!我提供的是一個更好的方法! –

+0

我已經提供了從當前節點訪問祖先的方式..但在你的情況下,它不是必需的..你也不應該這樣做..讓我知道你是否需要任何幫助理解。 –

相關問題