verenice: XSL / copy-of...

Hallo,
ich möchte mit dem Befehl copy-of einen Knoten in meinem XML-File kopieren und dann die einzelnen Elemente ausgeben.
Leider wird nichts in HTML generiert.
Ich sehe in der Textausgabe vom HTML-Dokument, dass der Knoten richtig kopiert wurde. Allerdings erhalte ich keine Ausgabe.
Was habe ich falsch gemacht?:-/

Quelltext:
<KapitelRef id="1">
<TextRef id="1"/>
<TextRef id="2"/>
</KapitelRef>

<xsl:template match="KapitelRef">
<xsl:copy-of select="//KapitelRef[@id='1']"/>
<xsl:apply-templates />
</xsl:template>

<xsl:template match="/Textbaustein">
<xsl:value-of select="."/>
</xsl:template>

<xsl:template match="/Bild">
<xsl:value-of select="."/>
</xsl:template>

Vielen Dank schon mal im voraus.

Viele Grüße
verenice

  1. Hallo,

    ich möchte mit dem Befehl copy-of einen Knoten in meinem XML-File kopieren und dann die einzelnen Elemente ausgeben.
    Leider wird nichts in HTML generiert.

    Doch es wird: das sagt du ja selbst:

    Ich sehe in der Textausgabe vom HTML-Dokument, dass der Knoten richtig kopiert wurde.

    Allerdings erhalte ich keine Ausgabe.

    Doch ;-)
    copy-of hat dir das XML-Fragment in dein HTML hineinkopiert. Das ist die Ausgabe die du mittels copy-of erzeugt hast.

    Was habe ich falsch gemacht?:-/

    Ich tippe auf falsch gedacht, statt falsch gemacht. Was möchtest du erreichen?
    Du kannst nicht in XML-Fragment in dein HTML hineinkopieren und dann mit XSL nochmal darauf zurückgreigen (hier erstellt dir copy-of einfach literale Ergebniselemente und darauf hat das XSL keinen Zugriff mehr.)

    Grüße
    Thomas

    1. Hallo Thomas,
      vielen vielen Dank für Deine Hilfe!

      Hier erstellt dir copy-of einfach literale Ergebniselemente und darauf hat das XSL keinen Zugriff mehr.

      Mh,wie kann ich denn die kopierte XML-Struktur weiterverarbeiten in XSLT? Ich dachte mit <xsl:value-of select="." /> kann man die XML-Daten aus dem kopierten Knoten anzeigen lassen.

      Viele Grüße
      verenice

      1. Hallo,

        vielen vielen Dank für Deine Hilfe!

        Hier erstellt dir copy-of einfach literale Ergebniselemente und darauf hat das XSL keinen Zugriff mehr.

        Mh,wie kann ich denn die kopierte XML-Struktur weiterverarbeiten in XSLT?

        Mit XSLT 1.0 gar nicht. Mit XSLT 2.0 kannst du eine Variable erstellen darin die copy-of machen (damit hast du einen temporären Baum) und dann auf die Elemente mit $variableName/elementName  etc. zugreifen.

        Ich dachte mit <xsl:value-of select="." /> kann man die XML-Daten aus dem kopierten Knoten anzeigen lassen.

        Nein, nicht in deinem Fall, weil du auf die literale Ergebniselemente keinen Zugriff mehr mit XSL hast.
        Ich weiss auch nicht, was du mit copy-of an dieser Stelle erreichen willst, denn ein apply-templates (das du bereits hast) erfüllt seinen Zweck.
        Zudem ergibt das Template so:
           <xsl:template match="KapitelRef">
              <xsl:copy-of select="//KapitelRef[@id='1']"/>
              <xsl:apply-templates />
           </xsl:template>
        auch keinen Sinn.
        Du kannst gleich ein:
           <xsl:template match="KapitelRef[@id='1']">
              <xsl:apply-templates />
           </xsl:template>
        machen oder einfach an der gewünschten Stelle z.B. ein:
           <xsl:apply-templates select="//KapitelRef[@id='1']" />
           wenn dein Template dazu so aussieht:
           <xsl:template match="KapitelRef">
              <xsl:apply-templates />
           </xsl:template>
        aufrufen.

        Grüße
        Thomas