Subject: [xsl] lookup table problem From: Alexander.RACHER@xxxxxxxx Date: Fri, 21 Apr 2006 14:31:45 +0200 |
hi, i'm using xml version 1.0 with apache fop 0.90. i read many description how to use the document() function with a lookup table (a second xml file containing information i need to process my xml source-document), but despite all efforts it didn't work. following scenario: in my source-xml i can find following code <positLoco>DE</positLoco>, whose meaning ( <codeText>) i need to be printed in my resulting fo-file. this is part of my source file 'dakl.xml' including the code: <seife> <at.sds.xc.reportService.ReportDaten> [...] <at.sds.xc.positionsreports.DaklOutput> <belegnummerList arraySize="1"> [...] </belegnummerList> <depot> [...] </depot> <depotDaten> [...] </depotDaten> <verrechnungskonto> [...] </verrechnungskonto> <einzelPositionList arraySize="5"> <element> <positionsDaten> <positSaldoGilt>19998</positSaldoGilt> <positVerwahrart>WR</positVerwahrart> <positLoco>DE</positLoco> [...] here is a part of the lookup table SVZ_1001.xml <?xml version="1.0" encoding="ISO-8859-1"?> <getTables> <at.sds.xc.coreService.CodeTableList arraySize="1"> <element> <codeTableNo>1001</codeTableNo> <codeTableType>ALLG</codeTableType> <codeTableName>code-table-name</codeTableName> <codes arraySize="97"> <element> <code>0000</code> <hcode/> <sysstatus>0</sysstatus> <codeText>Wien</codeText> </element> <element> [...] I need the <codeText> (lookup) where <positLoco> (source) equals <code> (lookup). so, the output should look like Loco: Wien (and not '0000'). here is a part of my (wellformed) xsl (template will be called within fo:root): <xsl:template name="Posit"> <xsl:choose> <xsl:when test="//einzelPositionList"> <fo:table table-omit-header-at-break="false" table-layout="fixed" border-collapse="separate" font-size="8pt" width=" 100%"> <fo:table-column column-width="35mm"/> <fo:table-column column-width="10mm"/> <fo:table-column column-width="90mm"/> <fo:table-column column-width="30mm"/> <fo:table-column column-width="25mm"/> <fo:table-header> [...] </fo:table-header> <fo:table-body> <xsl:for-each select=" //einzelPositionList/element"> <fo:table-row> <xsl:attribute name=" background-color"> <xsl:choose> <xsl:when test=" (position() mod 2) = 0">#ffffff</xsl:when> <xsl:otherwise>#9ECCFA</ xsl:otherwise> </xsl:choose> </xsl:attribute> <fo:table-cell> [...] </fo:table-cell> <fo:table-cell> [...] </fo:table-cell> <fo:table-cell> <fo:block> <xsl:variable name="loco-svz" select=" document('SVZ_1001.xml')//codes/element = //positDaten/positLoco"/> <xsl:if test="normalize-space(./positionsDaten/positLoco) != $leer "> <xsl:text>Loco: </xsl:text> <xsl:for-each select="$loco-svz"/> <xsl:value-of select="$loco-svz/codeText"/> </xsl:if> </fo:block> [...] fop - message: Exception org.apache.xpath.XPathException: #BOOLEAN kann nicht in NodeList konvertiert werden! (means: boolean can not be coverted into nodelist) how do i need to write my xsl to get things working as i expect? i also tried the suggestion of http://www-128.ibm.com/developerworks/library/x-xsltip.html (see later) with this xsl. this solution didn't work - apache fop 0.90 didn't like the position of the templates. maybe this is becaus there already is a template around the table. thx in advance alex <?xml version="1.0"?> <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text"/> <!-- A --> <xsl:key name="state-lookup" match="state" use="abbr"/> <!-- B --> <xsl:variable name="states-top" select="document('states.xml')/states"/> <xsl:template match="label"> <xsl:value-of select="name"/> <xsl:text> of </xsl:text> <!-- C --> <xsl:apply-templates select="$states-top"> <xsl:with-param name="curr-label" select="."/> </xsl:apply-templates> </xsl:template> <!-- D --> <xsl:template match="states"> <xsl:param name="curr-label"/> <xsl:value-of select="key('state-lookup', $curr-label/address/state)/name"/> </xsl:template> </xsl:transform> ______________________________________________________________________ Der Austausch von Nachrichten mit Software Daten Service via E-Mail dient ausschliesslich Informationszwecken. Rechtsgeschaeftliche Erklaerungen duerfen ueber dieses Medium nicht ausgetauscht werden. Correspondence with Software Daten Service via e-mail is only for information purposes. This medium is not to be used for the exchange of legally-binding communications.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Phonetic Sorting for Japa, Michael Kay | Thread | Re: [xsl] lookup table problem, G. Ken Holman |
Re: [xsl] Re: Character 150 withs W, andrew welch | Date | Re: [xsl] Character 150 withs Windo, andrew welch |
Month |