是否可以在XSL-FO样式表的列表中确定键的位置?

时间:2014-10-23 19:59:57

标签: xslt xsl-fo apache-fop

我已经获得了<xsl:key>引用的对象列表,并且我试图找出{{1}内引用对象的顺序1}}(或类似的块)。

我有以下XML:

<xsl:value-of>

以下XSLT:

<document>
  <question>
    <text>Please demonstrate your compliance with some boring standard.</text>
    <answer>
      <attachment ref="11111111-2222-3333-4444-555555555555"/>
      <attachment ref="22222222-3333-4444-5555-666666666666"/>
    </answer>
  </question>
  <question>
    ...
  </question>

  <attachment id="11111111-2222-3333-4444-555555555555">
    <name>employee_names_and_titles.doc</name>
    ...
  </attachment>
  <attachment id="22222222-3333-4444-5555-666666666666">
    <name>standard_operating_procedures.doc</name>
    ...
  </attachment>
</document>

我想要的文档布局是在一个流程中包含所有问题和答案,答案经常引用后面附录中的内容。在附录中,每个&#34;附件&#34;应该在它自己的页面上,并且每个附件应该递增编号。

所有这一切都按预期发生;但是,目前答案是请参阅employee_names_and_titles.doc ,当我真正想要的是参考附录A

有没有办法可以弄清楚附件的位置ref =&#34; 1111 ......&#34;在附件列表中,在问答部分的范围内?有没有更好的格式化XML的方法,所以也许我不会遇到这个问题?

2 个答案:

答案 0 :(得分:2)

  

有没有办法可以弄清楚依恋的位置   REF =&#34; 1111 ...&#34;在附件列表中

您可以计算其先前的附件兄弟姐妹,例如:

<xsl:template match="answer/attachment">
  <fo:block>
   Refer to Appendix <xsl:number value="count(key('attachments', @ref)/preceding-sibling::attachment) + 1" format="A"/>
  </fo:block>
</xsl:template>

答案 1 :(得分:0)

xsl:number,即使在XSLT 1.0(http://www.w3.org/TR/xslt#number)中,“根据源树中当前节点的位置插入一个数字”,所以如果引用是带有附件的1:1和按照相同的顺序,您可以让XSLT处理器付出艰苦的努力:

<xsl:template match="answer/attachment">
  <fo:block>Refer to Appendix <xsl:number level="any" format="A"/></fo:block>
</xsl:template>