我是XSL-FO编程的新手,我需要帮助。 我基本上需要使用XML中的数据将XSL-FO文件呈现为PDF。
但是当我尝试时,所有内容都显示在PDF(背景,手动输入的文本)中,而不是应该从XML读取的数据。
请注意,我只尝试使用元素“idShip”。
我的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE shipment SYSTEM "C:\Users\informatica\Documents\workspace\PrintTest\shipment.dtd">
<?xml-stylesheet href="shipment_to_pdf.xsl" ?>
<shipment>
<idShip>111</idShip>
<fare></fare>
<to>
<name></name>
<surname></surname>
<address1></address1>
<address2></address2>
<zip></zip>
<city></city>
<country></country>
<email></email>
<phone></phone>
</to>
<from>
<name></name>
<surname></surname>
</from>
</shipment>
XSL:
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<fo:layout-master-set>
<fo:simple-page-master page-height="135mm"
page-width="216mm" margin-top="10mm" margin-left="20mm"
margin-right="20mm" margin-bottom="10mm" master-name="PageMaster">
<fo:region-body background-color="#EFAFAF"
margin-top="20mm" margin-left="10mm" margin-right="10mm"
margin-bottom="20mm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence initial-page-number="1"
master-reference="PageMaster">
<fo:flow flow-name="xsl-region-body">
<fo:block text-indent="1em" font-family="sans-serif"
font-size="20pt" font-weight="bold" background-color="#EEEEEE"
line-height="20mm">
//this should be the problem
<xsl:for-each select="shipment">
<xsl:value-of select="idShip" />
</xsl:for-each>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
PDF现在呈现为具有红色背景的块,但没有来自XML的数据。
答案 0 :(得分:1)
您正在使用所谓简化的XSLT模块(XSLT 1.1 recommendation,XSLT 2.0 recommendation)几乎正确,它只是错过了根元素中的xsl:version
属性。
只需将xsl:version="1.0"
(或2.0
(如果您需要新功能和,您的XSLT处理器支持它们)添加到fo:root
元素,您应该获得预期的结果。
请注意,简化的样式表有一些限制,因为您无法定义参数,全局变量,函数(如果使用XSLT 2.0),键和其他模板。