在向其添加Class属性时删除图像

时间:2012-01-23 18:23:22

标签: xml xslt xhtml

我有一个XSLT文件和一个XML文件。在XML文件中,我有一个具有Class属性的Image标签。当我想用XSL文件中的这些Image做某些事情时。从它们中移除图像,即:

<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”,那么效果很好,并向我显示图像 你能帮帮我吗? 非常感谢你

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

处理此问题的正确方法是使用Identity Transform和适当的覆盖。请注意,覆盖模板会复制现有元素的现有属性和未修改的子节点;它所做的就是添加一个新属性:

<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的class属性的元素。

完整输入:

<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>