xsl-list
[Top] [All Lists]

[xsl] lookup table problem

2006-04-21 05:32:03
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. 


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>