Forum: XML Beginner |
Thema:
Problem mit XPath bzw document() |
Von:
G. Guest (
27.09.2005 12:24) |
Hi Leute,
hab mal wieder ein Problem, und zwar:
Mittels einer XSL baue ich mir aus mehreren XML-Dateien eine FO, bzw PDF datei.
Meine Frage ist jetzt wie kann ich Mittels XPath auf ein Element in zugreifen was aus einer anderen XML stammt.
Also ich hab eine Xml in der alle Verweise auf die benutzten XMLs sind. Sieht so aus:
[code]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE document SYSTEM "../sys/m.dtd">
<document xmlns:xinclude="http://www.w3.org/1999/XML/xinclude">
<xinclude:include href="..\content\1_001_006_neu.xml" />
<xinclude:include href="..\content\2_112_020_neu.xml" />
.
.
.
</document>
[/code]
Einbinden tue ich das ganze mittels der document Funktion, in etwa so:
[code]
<xsl:template match="document">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="xinclude:include">
<xsl:apply-templates select="document(@href)"/>
</xsl:template>
<xsl:template match="Seite">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Kapitelueberschrift">
<xsl:variable name="lastKap" select="preceding::xinclude:include/Seite/Kapitelueberschrift[last()]/text()"/>
<xsl:choose>
<!-- wenn die Kapitelueberschrift schon im vorhergehenden Dokument vorkam soll er sie nicht schreiben-->
<xsl:when test="text()=$lastKap">
</xsl:when>
<xsl:otherwise>
<fo:block font-size="22pt" space-before="1em">
<xsl:value-of select="text()"/>
</fo:block>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
[/code]
Es geht darum zu ueberpruefen ob die Kapitelueberschriftim vorhergehenden XML-dokument die selbe war oder nicht und daran zu entscheiden ob sie geschrieben wird oder nicht.
Funktioniert alles bis auf diese Zeile:
[code]
<xsl:variable name="lastKap" select="preceding::xinclude:include/Seite/Kapitelueberschrift[last()]/text()"/>
[/code]
Hat jemand ne Ahnung wie Document() behandelt wird? Befinden sich dann alle XML-Dokumente in einem Baum oder nicht? Oder kann man sonst irgendwie auf das vorhergehende Dokument zugreifen?
Helt mir bitte, bastle schon ewig dran rum.
mfg
Marvin
Antworten
Vorsicht bei der Eingabe: Die Zeichen ' oder -- sind nicht erlaubt!