2017-02-21 2 views
0

Le fichier XML contient des comptes et une liste de comptes (contient ID et AccountDescription). Dans l'exemple ci-dessous, il y a 2 comptes.Comment afficher tous les éléments XSL?

<?xml version="1.0"?> 
<Accounts> 
<Account> 
    <ID>5</ID> 
    <AccountDescription>Account Description 5</AccountDescription> 
</Account> 
<Account> 
    <ID>8</ID> 
    <AccountDescription>Account Description 8</AccountDescription> 
    </Account> 
</Accounts> 

Lorsque vous utilisez le dessous XSL, il crée un fichier PDF avec 2 pages, et chaque page a l'ID d'en-tête et AccountDescription, mais il n'y a pas de données/contenu en dessous, comme ceci:

sur page 1:

ID AccountDescription

À la page 2:

ID AccountDescription

Je voudrais montrer les données comme ceci:

ID AccountDescription

5 Description du compte 5

8 Description du compte 8

Comment puis-je faire cela? Je vous remercie.

Ceci est mon actuel XSL:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:fo="http://www.w3.org/1999/XSL/Format"> 

<xsl:template match="Accounts"> 
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <fo:layout-master-set> 
      <fo:simple-page-master 
       master-name="main" 
       margin-top="0px" 
       margin-bottom="0px" 
       margin-left="18px" 
       margin-right="18px"> 
       <fo:region-body margin-top="0.75in" margin-bottom="2in" margin-left="18px" margin-right="18px"/> 
       <fo:region-before extent="0.75in"/> 
       <fo:region-after extent="1.5in"/> 
       <fo:region-end extent="75px"/> 
     </fo:simple-page-master> 
    </fo:layout-master-set> 
    <xsl:apply-templates select="Account"/> 
</fo:root> 
</xsl:template> 

<xsl:template match="Account"> 
<fo:page-sequence master-reference="main"> 
    <fo:flow flow-name="xsl-region-body"> 
     <fo:table font-size="10pt"> 
      <fo:table-column column-width="15mm"/> 
      <fo:table-column column-width="55mm"/> 
      <fo:table-body> 
       <fo:table-row> 
        <fo:table-cell > 
         <fo:block text-align="right"><xsl:value-of select="ID"/></fo:block> 
        </fo:table-cell> 
        <fo:table-cell > 
         <fo:block text-align="right"><xsl:value-of select="AccountDescription"/></fo:block> 
        </fo:table-cell> 
        </fo:table-row> 
      </fo:table-body> 
     </fo:table> 
    </fo:flow> 

</fo:page-sequence> 
</xsl:template> 

</xsl:stylesheet> 
+0

Vous essayez de apply-templates à/match 'AccountRow', mais cet élément n'existe pas dans votre exemple XML. Est-ce un problème avec votre feuille de style ou un problème avec votre échantillon? –

+0

Oui, vous avez raison. J'ai édité mon article original, alors maintenant je n'appelle pas . Au lieu de cela, je fais . Avec cela, je vois les données, mais chaque données montre sur une page différente, à savoir: Page 1 J'ai 5 - Description du compte 5, et sur Page 2 J'ai 8 - Description du compte 8. Comment puis-je afficher toutes les données dans le même page ? Je vous remercie. – faujong

Répondre

1

Comment puis-je afficher toutes les données dans la même page?

Vous devez utiliser un seul fo:page-sequence. Déplacez-le du modèle Account vers le haut dans le modèle Accounts.

Mise à jour XSLT

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format"> 

    <xsl:template match="Accounts"> 
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
     <fo:layout-master-set> 
     <fo:simple-page-master 
      master-name="main" 
      margin-top="0px" 
      margin-bottom="0px" 
      margin-left="18px" 
      margin-right="18px"> 
      <fo:region-body margin-top="0.75in" margin-bottom="2in" margin-left="18px" margin-right="18px"/> 
      <fo:region-before extent="0.75in"/> 
      <fo:region-after extent="1.5in"/> 
      <fo:region-end extent="75px"/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="main"> 
     <fo:flow flow-name="xsl-region-body"> 
      <xsl:apply-templates select="Account"/> 
     </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 
    </xsl:template> 

    <xsl:template match="Account"> 
    <fo:table font-size="10pt"> 
     <fo:table-column column-width="15mm"/> 
     <fo:table-column column-width="55mm"/> 
     <fo:table-body> 
     <fo:table-row> 
      <fo:table-cell > 
      <fo:block text-align="right"><xsl:value-of select="ID"/></fo:block> 
      </fo:table-cell> 
      <fo:table-cell > 
      <fo:block text-align="right"><xsl:value-of select="AccountDescription"/></fo:block> 
      </fo:table-cell> 
     </fo:table-row> 
     </fo:table-body> 
    </fo:table> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Cela fonctionne, merci! Mais, il répète les en-têtes de colonne pour chaque ligne. Donc, j'ai apporté des modifications mineures: < fo: table-ligne> ID Description du compte faujong