2017-02-21 28 views
0

Файл XML содержит учетные записи и список учетных записей (содержит идентификатор и учетную запись). В приведенном ниже примере есть 2 Аккаунта.Как показать все элементы 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> 

При использовании ниже XSL, он создает PDF-файл с 2-х страниц, и каждая страница имеет идентификатор заголовка и AccountDescription, но нет данных/содержание под ним, как это:

On страница 1:

ID AccountDescription

На странице 2:

ID AccountDescription

Я хотел бы показать данные, как это:

ID AccountDescription

5 Счет Описание 5

8 Счет Описание 8

Как я могу это сделать? Спасибо.

Это мой текущий 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

Вы пытаетесь применить-шаблоны для/матч 'AccountRow', но этот элемент не существует в вашем образце XML. Это проблема с вашей таблицей стилей или проблемой с вашим образцом? –

+0

Да, вы правы. Я редактировал свое оригинальное сообщение, поэтому теперь я не звоню . Вместо этого я делаю . С этим я вижу данные, но каждый из них отображается на разных страницах, то есть: Page 1 У меня есть 5 - Описание учетной записи 5, а на странице 2 У меня есть 8 - Описание учетной записи 8. Как я могу показать все данные в та же страница? Спасибо. – faujong

ответ

1

Как я могу показать все данные в одной и той же странице?

Вам нужно использовать только один fo:page-sequence. Переместите его с шаблона Account в шаблон Accounts.

Обновлено 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

Это работает, спасибо! Но он повторяет заголовки столбцов для каждой строки. Поэтому я сделал небольшие изменения: < fo: table-row> ID Описание учетной записи faujong