Announcement

Collapse
No announcement yet.

zwei xml dokumente mitels xslt zu einem machen

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

  • zwei xml dokumente mitels xslt zu einem machen

    hallo!
    ich habe zu meinen problem schon allerhand gesucht aber nichts gefunden, hoffentlich kann mir hier jemand weiterhelfen:

    ich habe zwei xml-docs:

    1.
    ************************************
    <PRE>
    ...
    <urltest><!--enthält den namen des zweiten xml-docs--></urltest>
    <name>#anderername</name>
    <adresse>eine Strasse</adresse>
    ...
    </PRE>
    ************************************

    2.
    ************************************
    <PRE>
    ...
    <anderername>Müller</anderername>
    ...
    </PRE>
    ************************************

    Nun die xslt-datei (wird auf das erste xml-doc angewendet), die beide verbindet:

    ****************************************
    <PRE>
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xslutput method="xml" indent="yes"/>
    <xsl:template match="*">
    <xsl:element name="{name()}">
    <xsl:if test="substring(.,1,1)='#'">
    <xsl:for-each select="document(//urltest)/produkt">
    <xsl:for-each select="?????">
    <xsl:apply-templates/>
    </xsl:for-each>
    </xsl:for-each>
    </xsl:if>
    <xsl:if test="substring(.,1,1)!='#'">
    <xsl:apply-templates/>
    </xsl:if>
    </xsl:element>
    </xsl:template>
    </xsl:stylesheet>
    </PRE>
    ****************************************

    die Ausgabe soll dann in etwa so werden:

    ****************************************
    <PRE>
    ...
    <name>Müller</name>
    <adresse>eine Strasse</adresse>
    ...
    </PRE>
    ****************************************

    Erklärung:
    in dem ersten xml-doc hat der Inhalt einiger tags ein vorangestelltes #.
    das bedeutet, das der eigentliche Inhalt aus dem anderen xml-doc gelesen werden soll, und zwar aus dem tag mit der bezeichnung, die hinter dem doppelkreuz steht.
    falls kein # dasteht soll der ganz normale inhalt ausgegeben werden.

    mein problem liegt hier (ansonsten klappt alles soweit):

    <PRE>
    <xsl:for-each select="document(//urltest)/produkt">
    <xsl:for-each select="??????"> <---------------------
    <xsl:apply-templates/>
    </xsl:for-each>
    </xsl:for-each>
    </PRE>

    wie mache ich ihm klar, dass ich den einen substring vom inhalt des oben gerade angesprochenen tags möchte.
    wenn ich es mit
    select="substring(.,2)" versuche gibt er mir immer aus, dass der Ausdruck keinen DOM-Knoten zurück gibt, selbst wenn ich direkt
    select="substring(#anderername,2)" einsetze kommt diese fehlermeldung.

    ich würde mich sehr über hilfe freuen!

    Manja Jander

  • #2
    Du kannst den Substring in eine Variable $Var speichern und dann Elemente auswählen die den TagNamen haben mit
    select="*[name()=$Var]"

    Bernwar

    Comment


    • #3
      vielen dank! es funktioniert :

      Comment

      Working...
      X