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
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
Comment