Wert wird zweimal ausgegeben?
Schlabinsche
- xsl
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?
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
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.
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
@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.