Announcement

Collapse
No announcement yet.

xsl:template - Alle Elemente werden in Output geschrieben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • xsl:template - Alle Elemente werden in Output geschrieben

    Hallo,

    ich habe folgendes seltsames Verhalten bei der XSL Transformation meiner Quellnachricht festgestellt (ich nutze XMLSpy). Anbei ein vereinfachtes Beispiel, um das das Problem zu verdeutlichen. Ich nutze nur ein einziges xsl:template statement, um den Kontext auf /exampleXML/name zu setzen. Ich würde hier erwarten, dass im Output nur der Wert des Elements <firstName> erscheint. Stattdessen werden aber auch alle andere Elementwerte aus dem <otherElements> in den Output geschrieben (ohne Elementtags).
    Wie kann das sein? Beim Debuggen habe ich gesehen, dass ein "built in template" verwendet wird, könnte das die Ursache sein? Wie kann ich ein derartiges Verhalten verhindern?
    Meine reale Struktur enthält mehr als hundert Subelemente und ich möchte durch xsl:template verhindern, dass ich jeweils den gesamten Pfad eintippen muss.
    Danke füer jede Hilfe!

    Source XML:

    <exampleXML>
    <name>
    <firstName>myFirstName</firstName>
    <lastName>myLastName</lastName>
    </name>
    <otherElements>
    <Element1>FirstElement</Element1>
    <Element2>SecondElement</Element2>
    </otherElements>
    </exampleXML>

    XSLT:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xslutput method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/exampleXML/name">
    <output><xsl:value-of select="firstName"/></output>
    </xsl:template>
    </xsl:stylesheet>

    Output:

    <?xml version="1.0" encoding="UTF-8"?><output>myFirstName</output>FirstElementSecondElement

  • #2
    hoch steigen in den Knoten wo Daten ausgegeben werden soll

    immer mit Rootknoten beginnen




    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
        <xsl:template match="/">
            <xsl:apply-templates select="exampleXML"/>
        </xsl:template>
        <xsl:template match="exampleXML">        
            <xsl:apply-templates select="name"/>
        </xsl:template>
        
        <xsl:template match="name">
        <output><xsl:value-of select="firstName"/></output>
        </xsl:template>
    </xsl:stylesheet>

    Comment

    Working...
    X