Ich versuche, mehrere Dateien mit XSLT zu kombinieren und zu verarbeiten. Hier ist ein Beispiel für die Art von Struktur Ich arbeite mit:XSLT: Wie injiziere ich ein Dokument, dann tempates darauf anwenden?
seite.html
<html>
<head/>
</html>
head.html
<head>
<title />
</head>
proc.xsl
<xsl:template match="/html/head">
<xsl:apply-templates select="document('head.html')/head" />
</xsl:template>
<xsl:template match="/head/title">
<title>this is a contrived example</title>
</xsl>
I‘ m Anwendung proc.xsl
gegen page.html
. Alles funktioniert, aber beachten Sie, dass die Übereinstimmung im zweiten Vorlagenelement relativ zum eingeschlossenen Dokument sein muss, und nicht zu der, die es enthält. Ist das klug? Gibt es eine Möglichkeit sicherzustellen, dass die Anweisung apply-templates
im Zusammenhang mit dem einschließenden Dokument und nicht mit dem eingeschlossenen Dokument ausgeführt wird?
Um zu klären, ist das Ergebnis die ich suche ist:
head.xsl
<xsl:template match="/html/head">
<head>
<title />
</head>
</xsl:template>
Nochmal:
<html>
<head>
<title>this is a contrived example</title>
</head>
</html>
ich auch mit einem xsl-Datei wie folgt umfassen/Import versucht , dies injiziert die Kopf Markup fein, aber das title
Element verarbeitet nicht.
Ich verstehe Ihre Frage nicht. Die Übereinstimmung in der zweiten Vorlage (oder in einer beliebigen Vorlage) ist nicht "relativ zum eingeschlossenen Dokument" (oder einem Dokument). Und die 'apply-templates'-Anweisung funktioniert in dem Kontext, in dem sie aufgerufen wird; in Ihrem Beispiel im Kontext von '/ html/head' des Dokuments' page.html' - weil das der Kontext ist, der von der übergeordneten Vorlage festgelegt wird. Was ist das eigentliche Problem hier? –
Entschuldigung, ich bin sicher, dass die Terminologie weit entfernt ist. Was ich meine ist, dass der xpath-Ausdruck in der Übereinstimmung mit '/ head' anstatt mit'/html' beginnen muss, d. H. Er stimmt mit dem geladenen Dokument überein und nicht mit dem Ergebnis der Anwendung der ersten Vorlage auf das ursprüngliche Dokument. Ich werde mit einem Beispiel für das Ergebnis, das ich möchte, aktualisieren. –
Sie können die Template-Übereinstimmung einfach auf 'match =" head/title "' oder nur 'match =" title "' ändern, denn dann ist es egal, ob 'head' das Wurzelelement ist oder nicht. –