andy: xslt

Hallo,

versuche vergeblich folgendes zu lösen.

Ich habe ein xslt-schema geschrieben. er sucht in ein xml dokument nach <a> elemente und vor jedem <a> element soll ein <img> element eingefügt werden. Bis jetzt funktioniert es richtig, das Problem aber ist, dass jedes mal, wenn ich das xslt aufrufe, fügt es ein anderes <img> hinzu. Ich will aber das <img> nur einmal hinzufügen.

bsp:

<a href="blabla">Link</a>

xslt aufruf

<img scr="blabla><a href="blabla">link</a>

wenn ich xslt nochmal aufrufe kommt:

<img scr="blabla><img scr="blabla><a href="blabla">link</a>

wenn ich xslt nochmal aufrufe kommt:

<img scr="blabla><img scr="blabla><img scr="blabla><a href="blabla">link</a>

... usw

Wie kann ich dies Umgehen? So, dass ich sagen kann, wenn du einmal ein <img> vor dem <a> hinzugefügt hast dann tue nichts mehr.
Ich hoffe Sie haben mir verstanden.

vielen Dank für ihre hilfe,

mfg, Andy

  1. Hallo Andy,

    kannst Du mal schreiben wie Du das XSL formuliert hast ? Am besten das komplette XSL Es gibt da soviele Möglichkeiten.

    Gruss

    Marko

  2. Hi Andy,

    ungetesteter Pseudo-Code:

    <xsl:for-each select="//a">
    <xsl:when test="/preceding-sibling::img"></xsl:when>
    xsl:otherwise<img...><xsl:copy-of select="."></xsl:otherwise>
    </xsl:for-each>

    Gruß, Dein Onkel

    1. Hallo,

      ein alternativer Vorschlag:

      <xsl:template match="a">
         <img.. /><xsl:copy-of select=".">
      </xsl:template>

      <xsl:template match="img/a">
         <xsl:copy-of select=".">
      </xsl:template>

      Wenn das 2. Template passt wird es bevorzugt angewendet, da eingeschränkterer XPAth Ausdruck.

      Gruss

      Marko

      1. Hi,

        <xsl:template match="img/a">

        Das a-Element ist kein Kind des img.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hallo Andreas,

          <xsl:template match="img/a">

          Das a-Element ist kein Kind des img.

          Ups, da hast Du leider recht. Mit dem passenden XPath würde es aber vom Prinzip funktionieren.

          Gruss

          Marko

  3. Hallo,

    Ich habe ein xslt-schema geschrieben.

    Du meinst einen XSL-Stylesheet. (?)

    er sucht in ein xml dokument nach <a> elemente und vor jedem <a> element soll ein <img> element eingefügt werden.

    Normalerweise:
    <xsl:template match="a">
     <img ... /><a ... > ... </a>
    </xsl:template>

    Bis jetzt funktioniert es richtig, das Problem aber ist, dass jedes mal, wenn ich das xslt aufrufe, fügt es ein anderes <img> hinzu.

    Das verstehe ich nicht. Was bedeutet du rufst das XSL nochmals auf?

    Grüße
    Thomas