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>
--~--