Schlabinsche: Wert wird zweimal ausgegeben?

Hallo
Ich versuche gerade einige einfache Werte mit Hilfe von XML/XSL auszugeben und habe nun das Problem, dass Werte zweimal ausgeben werden.

Hier der Auszug des XML Dokuments :
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<ApplInfo>
 <AppName>Test Application</AppName>
 <Modules>
  <Module>
   <Name>Module 1</Name>
  </Module>
  <Module>
   <Name>Module 2</Name>
  </Module>
 </Modules>
</ApplInfo>

Und das zugehörige XSL Dokument :
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<HTML>
<HEAD>
</HEAD>
<BODY>
xsl:apply-templates/
</BODY>
</HTML>
</xsl:template>

<xsl:template match="ApplInfo">
 Application name : <xsl:value-of select="AppName"/>
 xsl:apply-templates/
</xsl:template>

<xsl:template match="Modules">
 <xsl:for-each select="Module">
  <h2><xsl:value-of select="Name"/></h2>
 </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Damit erhalte ich die Ausgabe :

Application name : Test ApplicationTest Application
Module 1
Module 2

? : Ich komme einfach nicht dahinter, wieso der Wert AppName immer zweimal ausgegeben wird obwohl er in der XML Datei nur einmal vorhanden ist.

Weiß jemand die Lösung?

  1. Hallo,

    ? : Ich komme einfach nicht dahinter, wieso der Wert AppName immer zweimal ausgegeben wird obwohl er in der XML Datei nur einmal vorhanden ist.

    Weiß jemand die Lösung?

    Fuege in dieser Vorlage hinzu: select="Modules"

    <xsl:template match="ApplInfo">
     Application name : <xsl:value-of select="AppName"/>
     <xsl:apply-templates select="Modules"/>
    </xsl:template>

    MfG, Thomas

  2. Hi,

    <xsl:template match="ApplInfo">
    Application name : <xsl:value-of select="AppName"/>

    das value-of führt zur ersten Ausgabe - der AppName wird explizit aufgerufen.

    xsl:apply-templates/

    Hier rufst Du die Templates für ALLE Kind-Elemente von ApplInfo auf, also auch für AppName.
    Da kein besonderes Template dafür existiert, wird das default-Template benutzt, das den Textinhalt ausgibt - daher die zweite Ausgabe des AppName.

    Abhilfe: siehe Thomas - einfach nicht alle Kind-Elemente auswählen beim Template-Aufruf.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  3. @Andreas : Danke für den Tip.
    @Thomas : Danke für die Erklärung.

    Jetzt hab ich das auch verstanden und funktionieren tut es auch noch.