2012-01-23 20 views
0

我有一个XSLT文件和一个XML文件。在XML文件中,我有图像标记,它具有Class属性。当我想从XSL文件中对这些图像执行某些操作时。从他们身上,即:删除图像,同时添加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> 
.... 

,当我加入的这些代码块XSLT文件我的图片带班“PIC”删除:

... 
<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获取没有名称空间前缀(如果有的话)的元素名称。在这种情况下,使用“。”的本地名称(。)是说当前元素的名称是“img”,因为你匹配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')"> 

第一个模板拷贝大多数元素。第二个模板仅处理那些具有值为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>