2015-07-10 64 views
0

我有這樣的結構副本父

<a href="xxx" class="box"> 
    <img src="1.jpg" alt="CBA" title="ABC" class="imgresp" height="204" width="307"> 
</a> 

我想要什麼:
如果A-標籤具有一流的「盒子」
然後從IMG公司,父標籤複製標題屬性

預期輸出:

<a href="xxx" class="box" title="ABC"> 
    <img src="1.jpg" alt="CBA" title="ABC" class="imgresp" height="204" width="307"> 
</a> 
+0

你能編輯你的問題來顯示你期望的輸出嗎?另外,如果您已經嘗試了一些XSLT,那麼即使它不起作用,您是否也可以證明這一點?謝謝! –

+0

用期望的輸出更新 – user966660

回答

0

首先,XML需要很好地形成的,所以img標籤需要關閉,否則將無法使用XSLT。

<a href="xxx" class="box"> 
    <img src="1.jpg" alt="CBA" title="ABC" class="imgresp" height="204" width="307" /> 
</a> 

假設真的是這樣,你則需要在X SLT identity transform

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

它自己,它只是將所有節點讀取,並從輸入XML屬性來輸出XML按照你的情況,它爲你帶來99%的收益。

然後,您只需要一個模板來複制您需要的額外屬性。在這種情況下,您需要一個與a標籤匹配的模板,該模板將其複製,但也會添加額外的屬性。

<xsl:template match="a[@class='box']"> 
    <xsl:copy> 
     <xsl:copy-of select="img/@title" /> 
     <xsl:apply-templates select="@*"/> 
     <xsl:apply-templates select="node()"/> 
    </xsl:copy> 
</xsl:template> 

或者,也許,這樣,使用Attribute Value Templates創建屬性

<xsl:template match="a[@class='box']"> 
    <a title="{img/@title}"> 
     <xsl:apply-templates select="@*|node()"/> 
    </a> 
</xsl:template> 

試試這個XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes" /> 

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

    <xsl:template match="a[@class='box']"> 
     <a title="{img/@title}"> 
      <xsl:apply-templates select="@*|node()"/> 
     </a> 
    </xsl:template> 
</xsl:stylesheet> 
0

您可以創建相匹配的節點 'A' 和「模板img'及其屬性。這個模板複製節點,做一個測試,如果有一個屬性「類」以添加標題屬性

<xsl:template match="a/@* |img/@* | a | img"> 
    <xsl:copy> 
     <xsl:if test="@class = 'box' "> 
      <xsl:attribute name="title" select="img/@title"/> 
     </xsl:if> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template>