我正在尝试做一些可能非常简单的事情,但我只是不明白为什么它不能从我读过的内容中发挥作用。
示例XML:
<example>
<item>
<name>something1</name>
<qty>1</qty>
</item>
<item>
<name>something2</name>
<qty>1</qty>
</item>
<item>
<name>something3</name>
<qty>2</qty>
</item>
</report>
示例XSLT:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" indent="yes" />
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="A4" page-height="297mm" page-width="210mm">
<fo:region-body margin-top="20mm" margin-bottom="20mm"/>
<fo:region-before extent="10mm"/>
<fo:region-after extent="10mm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4" >
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates select="report/item"/>
</fo:flow>
</fo:page-sequence>
<fo:page-sequence master-reference="A4" >
<fo:flow flow-name="xsl-region-before">
Some head content.
</fo:flow>
</fo:page-sequence>
<fo:page-sequence master-reference="A4" >
<fo:flow flow-name="xsl-region-after">
Some foot content.
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="item">
<fo:block><xsl:value-of select="qty" />, <xsl:value-of select="name" /></fo:block>
</xsl:template>
</xsl:stylesheet>
期望的结果: 我希望能够进行浏览器中出现的转换,但是创建一个总是出现常见页眉和页脚的页面,以及填充页面直到它用完房间的信息,然后用同一个头开始另一个页面和脚信息。 即 - 如果有很多物品,我将每个物品放在一条线上,直到它用完了A4空间,然后继续在另一张A4页面上。 在浏览器中查看页面布局并不重要,但需要在打印中以这种方式查看布局。 我错过了什么吗?还是我走在正确的轨道上?
对于学习XSL-FO的好资料的建议也会受到赞赏,因为大多数我看到的很难遵循这个想法,w3schools做了一个教程,但它描述它是独立的,不需要和XSLT。< / p>
已添加(2014年4月9日) 示例Raw XSL而不是XSL-FO
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" indent="yes" />
<xsl:template match="/">
<h3>Some Form</h3>
<table>
<tr>
<th>SomeName</th>
<th>Qty</th>
</tr>
<xsl:apply-templates select="Report/Item"/>
</table>
<h4>Some footer</h4>
</xsl:template>
<xsl:template match="item">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="qty"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>