【问题标题】:XSLT + XPath: usage of id and id-ref attributesXSLT + XPath:id 和 id-ref 属性的使用
【发布时间】:2014-05-05 00:55:33
【问题描述】:

我有一个包含多个 <page-sequences> 的 xsl-fo 文档。每一秒<page-sequences> 元素都有id="end" 属性。当我使用ref-id="end" 引用这些 ID 时,我如何知道检索到了哪个元素?我可以引用具有该 ID 的 下一个 元素吗?

示例(我的问题可以在评论中再次看到):

<fo:page-sequence id="end">
...........
</fo:page-sequence>

<fo:page-sequence>
...........
  <fo:page-number-citation-last ref-id="end"/>
  <!-- unfortunately, the previous element having id="ref" has been thus referenced -->
  <!-- how could I reference the next element? -->
...........
</fo:page-sequence>

<fo:page-sequence id="end">
...........
</fo:page-sequence>

【问题讨论】:

  • ID 应该始终是唯一的——这就是 ID 的意义所在。使用generate-id() 确保您的 ID 不是冗余的。
  • 是的,我已经找到了该解决方案并且它有效。您能否将其写为答案(对我的两个问题),以便我接受?

标签: xslt xpath xsl-fo page-numbering idref


【解决方案1】:

您能否将其写成答案(对我的两个问题),以便我接受?

当然。在 XSL-FO 中引用特定元素的前提是您有一种方法明确地标识它。执行此操作的最佳方法是为您要识别的元素使用 ID 属性。

ID 必须由任意字母数字字符序列和_ 组成(即,其值必须是有效的 NCName,请参阅the specification here)。

您可以手动输入每个 ID,但通常使用 xsl:generate-id() 完成(这是 XSLT 的功能,而不是 XSL-FO)。 generate-id() 自动确保 ID 在整个文档中是唯一的。

请注意,generate-id() 实际上会为当前模板匹配或在 xsl:for-each 的迭代中处理的节点生成一个 ID。

您可以在 XML 中的每个元素上放置一个 ID,因此 XSL-FO 中的任何元素都可以通过 ID 引用某些内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多