2010-12-07 4 views
1

У меня есть XML-документ, содержащий массив/список сложных элементов. Я хотел бы создать PDF-файл, чтобы каждый сложный элемент отображался на новой странице. Я работаю над одной страницей. Мой пример XML, как:Apache FOP: несколько страниц PDF из списка массивов xml итерация

<root> <list><x><1>10</1><2>20</2></x> <x><1>11</1><2>22</2></x> <x><1>13</1><2>23</2></x></list> </root> 

Я попытался следующие вокруг

<xsl:for-each select="list/x"> 
<fo:page-sequence master-reference="my-page" initial-page-number="auto" format="1"> 
<fo:flow flow-name="xsl-region-body"> 
<fo:block> 
     ... my fo:table etc here 
     </fo:block> 
     <fo:block id="SV_RefID_PageTotal" /> 
</fo:page-sequence> 
</xsl:for-each> 

Я получаю ошибки проверки. Что я делаю не так? Есть ли лучший способ сделать это? Thanks

+0

Пожалуйста, перечислите ваши ошибки. – 2010-12-07 21:07:52

+0

Каковы ошибки проверки? Являются ли они ошибками проверки xsl-fo или являются ли они ошибками, потому что ваш образец XML недостаточно хорошо сформирован? – 2010-12-07 21:12:46

ответ

0

Поскольку они еще не опубликованы, я предполагаю, что ваши ошибки связаны с тем, что ваш XML не очень хорошо сформирован. Имена элементов не могут начинаться с числа. (См. «Правила именования XML» в XML Elements)

Я также сделал быструю таблицу стилей XSL, которая будет генерировать действительный XSL-FO. Вероятно, это не то, что вы хотите, но, может быть, вы можете использовать часть или две из них?

Модифицированный Пример XML

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <list> 
    <x> 
     <c1>10</c1> 
     <c2>20</c2> 
    </x> 
    <x> 
     <c1>11</c1> 
     <c2>22</c2> 
    </x> 
    <x> 
     <c1>13</c1> 
     <c2>23</c2> 
    </x> 
    </list> 
</root> 

XSL Stylesheet

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="node()|@*"> 
    <xsl:choose> 
     <xsl:when test="name() = 'root'"> 
     <xsl:apply-templates/> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy>   
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 

    <xsl:template match="list"> 
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
     <fo:layout-master-set> 
     <fo:simple-page-master master-name="my-page"> 
      <fo:region-body/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 
     <xsl:apply-templates/> 
    </fo:root> 
    </xsl:template> 

    <xsl:template match="x"> 
    <fo:page-sequence master-reference="my-page" initial-page-number="auto" format="1"> 
     <fo:flow flow-name="xsl-region-body"> 
     <fo:table> 
      <fo:table-body> 
      <fo:table-row> 
       <xsl:apply-templates/> 
      </fo:table-row> 
      </fo:table-body> 
     </fo:table> 
     </fo:flow> 
    </fo:page-sequence> 
    </xsl:template> 

    <xsl:template match="c1|c2"> 
    <fo:table-cell> 
     <fo:block> 
     <xsl:apply-templates/> 
     </fo:block> 
    </fo:table-cell> 
    </xsl:template> 

</xsl:stylesheet> 

XSL-FO

<?xml version="1.0" encoding="UTF-8"?> 
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <fo:layout-master-set> 
     <fo:simple-page-master master-name="my-page"> 
     <fo:region-body/> 
     </fo:simple-page-master> 
    </fo:layout-master-set> 
    <fo:page-sequence master-reference="my-page" initial-page-number="auto" format="1"> 
     <fo:flow flow-name="xsl-region-body"> 
     <fo:table> 
      <fo:table-body> 
       <fo:table-row> 
        <fo:table-cell> 
        <fo:block>10</fo:block> 
        </fo:table-cell> 
        <fo:table-cell> 
        <fo:block>20</fo:block> 
        </fo:table-cell> 
       </fo:table-row> 
      </fo:table-body> 
     </fo:table> 
     </fo:flow> 
    </fo:page-sequence> 
    <fo:page-sequence master-reference="my-page" initial-page-number="auto" format="1"> 
     <fo:flow flow-name="xsl-region-body"> 
     <fo:table> 
      <fo:table-body> 
       <fo:table-row> 
        <fo:table-cell> 
        <fo:block>11</fo:block> 
        </fo:table-cell> 
        <fo:table-cell> 
        <fo:block>22</fo:block> 
        </fo:table-cell> 
       </fo:table-row> 
      </fo:table-body> 
     </fo:table> 
     </fo:flow> 
    </fo:page-sequence> 
    <fo:page-sequence master-reference="my-page" initial-page-number="auto" format="1"> 
     <fo:flow flow-name="xsl-region-body"> 
     <fo:table> 
      <fo:table-body> 
       <fo:table-row> 
        <fo:table-cell> 
        <fo:block>13</fo:block> 
        </fo:table-cell> 
        <fo:table-cell> 
        <fo:block>23</fo:block> 
        </fo:table-cell> 
       </fo:table-row> 
      </fo:table-body> 
     </fo:table> 
     </fo:flow> 
    </fo:page-sequence> 
</fo:root> 
Смежные вопросы