Yann: XSLT: eingebettete Angabe von Variablen

Beitrag lesen

Hallo Leute

Ich bin ein XSLT-Newbie und habe ein kleines Problem :-(

Grundsätzlich: Ich möchte per XSLT eine Abfrage in Oracle machen, was soweit auch funktioniert. Nur möchte ich nun die Abfrage (genauer: Die WHERE-Angabe) über einen XML-Input befüllen und hier streikt es.

Zuerst mal das XML mit den Angaben für das WHERE:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>

<querydata>
	<code>CH1003601234500000000000000001294</code>
</querydata>

Hier noch das XSLT:

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:sql="http://saxon.sf.net/sql" 
    extension-element-prefixes="sql">
    
    <xsl:output method="xml" media-type="text/xml" encoding="UTF-8" indent="yes"/>
    <xsl:variable name="mc">
		<xsl:value-of select="/querydata/code"/>
	</xsl:variable>
    <xsl:param name="database" select="'jdbc:oracle:thin:@omsrvvm72:1521:OMORCL11T'"/>
    <xsl:param name="user" select="'belvis1307'"/>
    <xsl:param name="password" select="'12years'"/>
    <xsl:param name="driver" select="'oracle.jdbc.OracleDriver'"/>
    
    <xsl:variable name="connection" as="java:java.sql.Connection" xmlns:java="http://saxon.sf.net/java-type">
        
        <sql:connect driver="{$driver}" database="{$database}" user="{$user}" password="{$password}">
            <xsl:fallback>
                <xsl:message terminate="yes">SQL extensions are not installed</xsl:message>
            </xsl:fallback>
        </sql:connect>
    </xsl:variable>
    
    <xsl:template match="/" name="main">
        <xsl:if test="not(element-available('sql:connect'))">
            <xsl:message>sql:connect is not available</xsl:message>
        </xsl:if>
        <sql:query connection="$connection" table="v_sd_entnahme" column="$meteringcode_s,name_kd_s" where="meteringcode_s='$mc'" row-tag="row" column-tag="col"/>
    </xsl:template>
    
</xsl:stylesheet>

Wie Ihr seht, versuche ich im oberen Bereich den Wert aus /querydata/code auszulesen und in eine Variable zu packen, welche ich dann unten dem sql:query im Attribut "Where" mit angebe.

Leider scheint dies so nicht zu funktionieren, ich erhalte vom Oracle immer einen Fehler "ungültiges Zeichen".

Habe ich das so richtig gemacht? Oder wie würdet Ihr das machen?

Liebe Grüsse Yann