2009-09-30 7 views
1

En XSL 2.0, j'essaie de parcourir certaines données par les valeurs distinctes, puis de faire quelque chose avec eux.Pourquoi ne puis-je pas naviguer en utilisant l'élément enfant dans cette expression xpath?

<xsl:for-each select="distinct-values(InvoiceLine/Service/ServiceMnemonicCode)">     
    <xsl:variable name="mnemonic"> 
    <xsl:value-of select="."/> 
    </xsl:variable> 
     <fo:table-row> 
      <fo:table-cell> 
       <fo:block> 
<xsl:value-of select="InvoiceLine/Service[ServiceMnemonic=$mnemonic]/ServiceDescription"/>      
       </fo:block> 
      </fo:table-cell> 
     </fo:table-row> 
</xsl:for-each> 

Cependant je me retrouve avec l'erreur suivante:

XPTY0020: Axis step 
child::element({http://schemas.blabla.com/etp/invoice/types}InvoiceLine, xs:anyType) 
cannot be used here: the context item is an atomic value 
ailed to compile stylesheet. 1 error detected. 

J'ai abeille googler avec fureur, et je ne vois les gens se plaignent de « valeurs atomiques » mais je ne l'ai pas vu quelqu'un suggérer ce que à faire à ce sujet. J'ai utilisé Saxon9. Toute idée serait grandement apprécié.

+1

Cette page semble aider un peu: http://www.oxygenxml.com/forum/topic3882.html – nont

Répondre

0

Je ne sais pas si sa solution, mais le meilleur cela semble fonctionner:

<xsl:template match="Invoice"> 
     <xsl:variable name="invoice"> 
      <xsl:copy-of select="."/> 
     </xsl:variable> 
     <fo:table border="0.5pt solid black" text-align="center"> 
      <fo:table-body> 
       <xsl:for-each select="distinct-values(InvoiceLine/Service/ServiceMnemonicCode)"> 
        <xsl:sort/> 
        <xsl:variable name="code"> 
         <xsl:copy-of select="."/> 
        </xsl:variable> 
        <fo:table-row> 
         <fo:table-cell> 
          <fo:block> 
           <xsl:value-of select="($invoice/node()/InvoiceLine/Service[ServiceMnemonicCode=$code]/ServiceDescription)[1]"/> 
          </fo:block> 
         </fo:table-cell> 
        </fo:table-row> 
       </xsl:for-each> 
      </fo:table-body> 
     </fo:table> 
    </xsl:template> 
Questions connexes