2011-08-17 7 views

答えて

3
<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <!--standard identity template that just copies content --> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <!--For every element that has an href attribute--> 
    <xsl:template match="*[@href]"> 
    <!--create an anchor element and an href attribute 
      with the value of the matched element's href attribute--> 
     <a href="{@href}"> 
        <!--then copy the matched element --> 
      <xsl:copy> 
         <!--then apply templates (which will either match the 
           identity template above or this template, 
           if any child elements have href attributes) --> 
       <xsl:apply-templates select="@*|node()"/> 
      </xsl:copy> 
     </a> 
    </xsl:template> 

    <!--redact the href attribute--> 
    <xsl:template match="*/@href"/> 
</xsl:stylesheet> 
+0

この変換は、OPが望む結果を生成しません。 –

+1

'@ href'を処理するのを忘れました。回答が更新されました。 –

0

この変換

:提供されるXML文書に適用

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="*[@href]"> 
    <a href="{@href}"> 
    <xsl:copy> 
    <xsl:apply-templates select= 
     "node()|@*[not(name()='href')]"/> 
    </xsl:copy> 
    </a> 
</xsl:template> 
</xsl:stylesheet> 

<img src="someimage.jpg" href="someurl.xml"/> 

は(他の答えとは違って)正確に指名手配、正しい結果を生成します。

<a href="someurl.xml"> 
    <img src="someimage.jpg"/> 
</a> 

説明Identity rulehref属性を持つ任意の要素でオーバーライド。

関連する問題