dynamische xpath-Anweisung
Markus Klein
- xsl
Hallo,
ich möchte in einem xsl-Programm eine xPath-Anweisung ausführen. Diese Anweisung soll jedoch dynamisch zugewiesen werden.
Ich habe folgendes probiert:
Einlesen des Parameters:
<xsl:param name="xpath" select="$xpath" />
....
<value>
<xsl:value-of select="$xpath"/>
</value>
...
Leider wird mir nur der Wert des Parameters zurückgegeben. Wünschenswert wäre es, wenn dieser Wert in dem select-Statement als XPATH verstanden und ausgeführt wird.
Hat jemand eine Lösung?
Gruß,
Markus
Hallo,
ich möchte in einem xsl-Programm eine xPath-Anweisung ausführen. Diese Anweisung soll jedoch dynamisch zugewiesen werden.
Ich habe folgendes probiert:
Einlesen des Parameters:
<xsl:param name="xpath" select="$xpath" />
Was wird hier dynamisch mit "$xpath" zugewiesen und woher?
Aus einer Variable, oder aus einem anderen Parameter?
<value>
<xsl:value-of select="$xpath"/>
</value>
Leider wird mir nur der Wert des Parameters zurückgegeben.
Das ist vollkommen normal. value-of lifert einen String.
"The xsl:value-of element is instantiated to create a text node in the result tree."
Wünschenswert wäre es, wenn dieser Wert in dem select-Statement als XPATH verstanden und ausgeführt wird.
Nicht mit value-of.
Kannst du bitte das Problem etwas anderes beschreiben?
Grüße
Thomas
Hallo,
gerne beschreibe ich den Kontext.
Ich komme aus dem SAP-Bereich (darum mit xsl nicht soviel am Hut), und kann von dort eine XSLT-Transformation aufrufen. Ich kann dabei sowohl das XML-Dokument als auch Paramter mitgeben. Hier gebe ich also einen Wert für den Paramter xpath mit (z.B.: //xyz[bedingung='001']/cvb ).
Dieser Wert soll nun als xpath irgendwie ausgewertet werden und in irgendeiner Variablen oder Paramter zur Verfügung gestellt werden.
Vielleicht ist es so verständlicher?
Danke & Gruß
Markus
Hallo,
gerne beschreibe ich den Kontext.
Ich komme aus dem SAP-Bereich (darum mit xsl nicht soviel am Hut), und kann von dort eine XSLT-Transformation aufrufen. Ich kann dabei sowohl das XML-Dokument als auch Paramter mitgeben. Hier gebe ich also einen Wert für den Paramter xpath mit (z.B.: //xyz[bedingung='001']/cvb ).
Dieser Wert soll nun als xpath irgendwie ausgewertet werden und in irgendeiner Variablen oder Paramter zur Verfügung gestellt werden.Vielleicht ist es so verständlicher?
Ja, jetzt verstehe ich die Frage besser.
Folgendes würde ich vorschlagen:
Einen globalen Parameter definieren:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="myXPath" />
...
dan im Template den Paramter verwenden:
<xsl:template match="foo">
<value>
<xsl:value-of select="$myXPath" />
</value>
</xsl:template>
Wenn der XSLT-Prozessor mit dem Parameter und dessen Wert (z.B.: //xyz[bedingung='001']/cvb ) aufgerufen wird, wird der Wert auch im Stylesheet gesetzt und kann verwendet werden.
Grüße
Thomas
Hallo Thomas,
danke für die schnelle Antwort. Genauso wie Du es beschrieben hast, hatte ich es probiert.
Leider ist das Problem, dass der Wert des Parameters zurückgegeben wird (also: //xyz[bedingung='001']/cvb . Ich vermute stark, dass es an dem benutzten XSLT-Prozessor des SAP-Umfelds liegt. In einer anderen Java-basierten Umgebung klappt es nämlich so, wie Du es beschrieben hast.
Komisch ist nur, dass bei der statischen Eingabe [ <xsl:value-of select="//xyz[bedingung='001']/cvb" />] die Xpath-Anweisung korrekt ausgeführt wird ....
Gruß,
Markus
Hallo,
danke für die schnelle Antwort. Genauso wie Du es beschrieben hast, hatte ich es probiert.
Leider ist das Problem, dass der Wert des Parameters zurückgegeben wird (also: //xyz[bedingung='001']/cvb . Ich vermute stark, dass es an dem benutzten XSLT-Prozessor des SAP-Umfelds liegt. In einer anderen Java-basierten Umgebung klappt es nämlich so, wie Du es beschrieben hast.
Nun, da kann ich leider wenig weiterhelfen. Es hängt wirklich dann vom XSLT-Prozessor ab. Bzw. ich weiss nicht wie du diesen aufrufst und wie der Name (und Pfad) XML-Datei und der Parameter und dessen Wert den Prozessor übergeben wird.
Komisch ist nur, dass bei der statischen Eingabe [ <xsl:value-of select="//xyz[bedingung='001']/cvb" />] die Xpath-Anweisung korrekt ausgeführt wird ....
Der Prozessor konvertiert den Parameterwert schienbar zu einem String und dann wird im value-of dies auch als String ausgegeben. In anderen Fall wird beim valu-of der Wert vom "select" normal als XPAth-ausdruck gewertet.
Vielleicht hilft wenn du folgendes versuchst bei der Defninition des Parameters:
<xsl:param name="myXPath" select="/.." />, damit soll ein leerer Knotenmenge als default Wert für den Parameter selctiert werden. Eventuell wertet dann der Prozessor andere Angaben richtig.
Grüße
Thomas