xpath-ausdruck aus xml-dokument auslesen und darauf anwenden
Alex Wolff
- xsl
hallo,
ich möchte eine xml-datei mit einem xsl-stylesheet transformieren. dabei soll nur ein bestimmter knoten des xml-documents bearbeitet bzw. transformiert werden. welcher das ist, soll durch einen xpath-ausdruck bestimmt werden. bis hierher alles ok. aber:
der xpath-ausdruck soll in einem element <thexpath> im xml-document festgelegt sein. das xsl-stylesheet soll als erstes diesen xpath auslesen und in einer variable speichern:
<xsl:variable name="myxpath">
<xsl:value-of select="thexpath" />
</xsl:variable>
um jetzt z.b. den text des mit $myxpath bezeichneten knotens auszugeben, müsste ich die string-variable $myxpath wie einen xpath-ausdruck anwenden:
<xsl:value-of select="$myxpath">
das scheint nicht zu funktionieren. wenn man die string-variable $myxpath durch ihren wert ersetzt, wird auch klar, warum:
<xsl:value-of select="'some/nodes'">
jetzt bin ich aufgeschmissen. es gibt auch keine funktion, die aus dem string einen xpath-ausdruck macht. die suche im selfhtml forum blieb recht erfolglos, nur eine sache war neu und könnte vielleicht etwas damit zu tun haben: diese seltsamen geschweiften klammern vor und hinter der variable. was bedeuten die? könnte es so funktionieren:
<xsl:value-of select="{$myxpath}">
grüße,
alex
Hallo,
nur eine sache war neu und könnte vielleicht etwas damit zu tun haben: diese seltsamen geschweiften klammern vor und hinter der variable. was bedeuten die? könnte es so funktionieren:
<xsl:value-of select="{$myxpath}">
Die { } bedeuten ein Attribut Value Template (AVT).
Nein, bei deinem Beispiel wird es nicht gehen, ein AVT kann nicht in einem XSL select-Attribut verwendet werden.
Was steht denn genau im <thexpath>? Wenn die Hochkommas auch drinn stehen muss du sie rausfiltern odr dafür sorgen dass sie nicht ins XML kommen, sonst wäre es ungewöhnlich, dass ein XSL-Prozessor etwas hinfügt, was nicht da ist.
Wäre also ein kurzer Quelltextauszug nicht schlecht.
Als alternative fällt mir die Verwendung vom document() ein, aber so überzugt, dass es in deinem Fall geht bin ich nicht.
Grüße
Thomas
hallo thomas!
Was steht denn genau im <thexpath>? Wenn die Hochkommas auch drinn stehen muss du sie rausfiltern odr dafür sorgen dass sie nicht ins XML kommen, sonst wäre es ungewöhnlich, dass ein XSL-Prozessor etwas hinfügt, was nicht da ist.
<thexpath>some/nodes[@id="index01"]</thexpath>
sowas könnte im xml-dokument stehen. die hochkommas waren von mir, da ich dachte, das wäre die rechnerinterne darstellung des wertes einer string-variablen. bei if-abfragen muss ich doch auch schreiben z.b.:
<xsl:if test="$mystringvar = 'hallo'">
mfg, alex
Hallo Alex,
» <thexpath>some/nodes[@id="index01"]</thexpath>
Das Problem ist, dass wenn der Inhalt vom <thexpath> in eine Variable geholt wird, ist das ein String, also nur eine Zeichenfolge und man kann nicht mehr als XPath-Ausdruck damit Arbeiten.
die hochkommas waren von mir, da ich dachte, das wäre die rechnerinterne darstellung des wertes einer string-variablen. bei if-abfragen muss ich doch auch schreiben z.b.:
<xsl:if test="$mystringvar = 'hallo'">
Ja, aber hier vergleichst du den Wert von $mystringvar mit dem String hallo, wenn du hallo nicht zwsichen Hochkommas setzt, gilt der als ein XPath-Ausdruck, hier also ein Elementname.
Mir fällt zu diesen Bedingungen auch nichts mehr ein.
Aber wenn du z.B. wirklihc mit IDs arbeites, kannst du das machen:
<thexpath>index01</thexpath>
<xsl:variable name="blabla" select="thexpath" />
<xsl:apply-templates select="element[@id = $balbla]" />
Da ich nicht weiss wie du das ganze verarbeitest: du könntest bei serverseitigen Verarbeitung Parameter mitgeben.
Mit JavaScript wäre auch eine Manipulation möglich: dazu gibts einige Threads im Archiv.
Grüße
Thomas