2012-01-23 12 views
0

私はXSLTファイルとXMLファイルを持っています.XMLファイルには、クラス属性を持つ画像タグがあります。つまり、彼らから:私はクラスで私の画像ファイルXSLTに「PIC」をコードするこれらのブロックを追加Class属性を追加しながら画像を削除する

<head> 
    <title>ERKLAERUNG</title> 
    </head> 
    <body> 
    <h1>Erklärung</h1> 
    <hr/> 
    <p> 
     Ich kenne einen Herrn 
     <span class="vcard"> 
     <span class="fn">Henry Riedel</span> 

     **<img class="pic" src="hk.png" />** 

     (<i class="nick">hrick</i>) , der in einer 
     <span class="org">Hauschuhfirma</span> arbeitet. Seine 
     Telefonnummer (
     <span class="tel"> 
      <i class="type">home</i>) ist: 
      <span class="value">+4.444.444.4442</span> 
     </span> 
     </span> 
.... 

削除:

... 
<xsl:template match="*[@class='pic']"> 
    <u> 
     <a> 
     <xsl:attribute name="onclick"> 
      <xsl:text>show_hcard('</xsl:text> 
      <xsl:value-of select="text()"/> 
      <xsl:text>')</xsl:text> 
     </xsl:attribute> 
     <xsl:value-of select="text()"/> 
     </a> 
    </u> 
    </xsl:template> 
... 

が、私の場合、たとえば私のXSLTファイル内のクラス名を変更しますつまり、うまく動作し、私に画像を見せてくれる「mmmm」へ 私? ありがとうございました

答えて

0

あなたはイメージ要素を捕まえていますが、何もしないので出力されません。このようなことを試してみてください。属性を追加するときは、既存の要素とその内容を出力する必要があります。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="xml" encoding="UTF-8" omit-xml-declaration="no" media-type="xml"/> 

    <xsl:template match="*[@class='pic']"> 

     <xsl:element name="{local-name(.)}"> 
      <xsl:attribute name="onclick"> 
       <xsl:text>show_hcard('</xsl:text> 
       <xsl:value-of select="../parent::node()//span[@class='fn']"/> 
       <xsl:text>')</xsl:text> 
      </xsl:attribute> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:element> 
    </xsl:template> 


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

ありがとうございましたが、あなたのanswer.Wouldのためにジェイソンあなたは' 'このコード行 – Baper

+1

local-nameは、名前空間接頭辞がない場合は要素の名前を取得します(存在する場合)。この場合、ローカル名(。)に "。" class = 'pic'の要素のためのあなたのマッチのために "img"である現在の要素の名前を取得すると言っています。 –

0

これを処理する適切な方法は、アイデンティティ変換と適切なオーバーライドです。オーバーライドテンプレートは、既存の要素の既存の属性と子ノードを変更しないでコピーすることに注意してください。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="*[@class='pic']"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*"/> 
      <xsl:attribute name="onclick"> 
       <xsl:text>show_hcard('</xsl:text> 
       <xsl:value-of select="../span[@class='fn']"/> 
       <xsl:text>')</xsl:text> 
      </xsl:attribute> 
      <xsl:apply-templates select="node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

関連出力:そのまま通じ、ほとんどの要素

<img class="pic" src="hk.png" onclick="show_hcard('Henry Riedel')"> 

最初のテンプレートをコピーし、それはないすべて1つの新しい属性を追加しています。 2番目のテンプレートは、値がpicのクラス属性を持つ要素のみを処理します。

全入力:

<html> 
    <head> 
    <title>ERKLAERUNG</title> 
    </head> 
    <body> 
    <h1>Erklärung</h1> 
    <hr/> 
    <p> 
     Ich kenne einen Herrn 
     <span class="vcard"> 
     <span class="fn">Henry Riedel</span> 

     **<img class="pic" src="hk.png" />** 

     (<i class="nick">hrick</i>) , der in einer 
     <span class="org">Hauschuhfirma</span> arbeitet. Seine 
     Telefonnummer (
     <span class="tel"> 
      <i class="type">home</i>) ist: 
      <span class="value">+4.444.444.4442</span> 
     </span> 
     </span> 
     </p> 
    </body> 
</html> 

全出力:要素名= "{ローカル名:

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>ERKLAERUNG</title> 
    </head> 
    <body> 
     <h1>Erklärung</h1> 
     <hr> 
     <p> 
     Ich kenne einen Herrn 
     <span class="vcard"><span class="fn">Henry Riedel</span> 

      **<img class="pic" src="hk.png" onclick="show_hcard('Henry Riedel')">** 

      (<i class="nick">hrick</i>) , der in einer 
      <span class="org">Hauschuhfirma</span> arbeitet. Seine 
      Telefonnummer (
      <span class="tel"><i class="type">home</i>) ist: 
       <span class="value">+4.444.444.4442</span></span></span></p> 
    </body> 
</html> 
関連する問題