将xml节点的完整路径放在属性文件中,并从xsl fo中的main xsl文件中读取节点的值

时间:2009-11-24 12:31:12

标签: xml pdf xslt pdf-generation

我一直在使用fop 0.95从xml数据生成pdf文件。我在这个过程中涉及三个文件:test.xml,test.xsl和attributes.xsl。当然我在xml文件中有xml数据。这里test.xml是主要的xsl文件,它从attributes.xsl文件中导入属性集。例如,我在attributes.xsl文件中有以下条目:

<xsl:attribute-set name="headerTable" foa:class="table">
    <xsl:attribute name="table-layout">fixed</xsl:attribute>
    <xsl:attribute name="width">6.05in</xsl:attribute>
    <xsl:attribute name="text-align">left</xsl:attribute>
    <xsl:attribute name="white-space-collapse">false</xsl:attribute>
</xsl:attribute-set>

现在我的要求是将属性名称放在属性文件中,并将关联的值存储在xml文件中。这样:

<MyRoot>
   <tableHeader>
      <tableLayout>fixed</tableLayout>
      <width>6.05in</width>
      <textAlign>left</textAlign>
      <whiteSpaceCollapse>false</whiteSpaceCollapse>
   </tableHeader>
</MyRoot>

在此之后,我将拥有如下属性文件:

<xsl:attribute-set name="headerTable" foa:class="table">
   <xsl:attribute name="table-layout">MyRoot/tableHeader/tableLayout</xsl:attribute>
   <xsl:attribute name="width">MyRoot/tableHeader/width</xsl:attribute>
   <xsl:attribute name="text-align">MyRoot/tableHeader/textAlign</xsl:attribute>
   <xsl:attribute name="white-space-collapse">MyRoot/tableHeader/whiteSpaceCollapse</xsl:attribute>
</xsl:attribute-set>

像往常一样,我使用主xsl文件中的属性,如下所示:

<fo:table xsl:use-attribute-sets="headerTable">
   <fo:table-column column-width="3in"></fo:table-column>
   <fo:table-column column-width="3.5in"></fo:table-column>
   <fo:table-body>
      <!--table rows and cells goes here-->             
   </fo:table-body>
</fo:table>

执行时,我收到以下错误:

"Ignoring property: table-layout="MyRoot/tableHeader/tableLayout" <Illegal character; property:'table-layout'>"

有没有人知道如何做到这一点?感谢。

1 个答案:

答案 0 :(得分:1)

在各种网站上游荡并且在这里没有回答问题时,我遇到了问题。在思考问题并进行命中和试验时,我只想说明这一行:

<xsl:attribute name="width">
     <xsl:value-of select="MyRoot/tableHeader/width">
     </xsl:value-of>
</xsl:attribute>

而不是属性文件中的以下内容:

<xsl:attribute name="width">MyRoot/tableHeader/width</xsl:attribute>

我为属性文件中放置的所有xml节点路径做了同样的事情。这太棒了!感谢。