【问题标题】:removing Images while adding Class attribute to them在向图像添加类属性的同时删除图像
【发布时间】:2012-02-17 02:18:54
【问题描述】:

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

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

【问题讨论】:

    标签: xml xslt xhtml


    【解决方案1】:

    您正在捕获图像元素,但没有对其进行任何操作,因此它不会被输出。尝试这样的事情。添加属性时需要输出现有元素及其内容。

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

    【讨论】:

    • 谢谢 jayson 的回答。请你解释一下,是什么让&lt;xsl:element name="{local-name(.)}"&gt; 这行代码
    • local-name 获取没有命名空间前缀(如果有的话)的元素名称。在这种情况下,本地名称(。)与“。”是说获取当前元素的名称,即“img”,因为您与 class='pic' 找到“img”元素的元素匹配
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 2011-03-09
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多