удаление изображений при добавлении к ним атрибута класса - PullRequest
0 голосов
/ 23 января 2012

У меня есть XSLT-файл и XML-файл. В XML-файле у меня есть тег Image с атрибутом Class. Когда я хочу что-то сделать с этими изображениями из 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-файле на i.e 'mmmm', это хорошо работает и покажет мне изображения Не могли бы вы помочь мне? Большое вам спасибо

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Правильный способ справиться с этим - с помощью 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.

Полный ввод:

<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>
0 голосов
/ 23 января 2012

Вы ловите элемент изображения, но затем ничего не делаете с ним, чтобы он не выводился.Попробуйте что-то вроде этого.Вам нужно вывести существующий элемент и его содержимое при добавлении вашего атрибута.

    <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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...