XSL FO 在具体注释之后读取第一个 fo:table 节点

Posted

技术标签:

【中文标题】XSL FO 在具体注释之后读取第一个 fo:table 节点【英文标题】:XSL FO Reading first fo:table node just after a concrete comment 【发布时间】:2019-05-21 18:35:15 【问题描述】:

我有一个很大的 XSL FO 文件。

在这个文件中,我有多个嵌套的 fo:table 对象,并且所有这些对象都不是通过唯一的 id 属性来标识的,以允许通过其唯一的 Id 搜索每个对象。 每个 fo:table 的开头都有一个包含唯一 Id 的注释,但这个 Id 并不总是相同的,每次都不相同,即使对于同一个表也是如此。无论如何,我知道如何通过分析始终相同的文件结构来搜索此评论。

现在我有了我想要的评论对象,但现在我面临以下问题:我需要在此评论之后立即获取第一个对象,在这种情况下,第一个 fo:table 对象。那么我该怎么做呢?

<!--  begin table FOPTable  id: 1005 cur_size: 0.0 prv_size: 3.25    prev: 1004 cols: 1 locks: 3 flow:null     --> 

<fo:table font-size="8pt" font-family="sans-serif" table-layout="fixed">   <fo:table-column column- /> 
<fo:table-body>
  <fo:table-row>
    <fo:table-cell padding-top="2.0pt" padding-right="2.0pt" font-family="sans-serif" font-size="8pt">   <fo:block    text-align="end">LINE 1</fo:block>    
    </fo:table-cell>
  </fo:table-row>
  <fo:table-row>
    <fo:table-cell padding-top="2.0pt" padding-right="2.0pt" font-family="sans-serif" font-size="8pt">
      <fo:block text-align="end">LINE 2</fo:block>
    </fo:table-cell>      
   </fo:table-row>   
</fo:table-body>   
</fo:table>

【问题讨论】:

【参考方案1】:

从评论模板中,选择fo:table

following-sibling::*[1]

选择fo:table

fo:table[preceding-sibling::comment()[1][contains(., 'id: 1005')]

(请注意,这只适用于 fo:table 的父节点。XPath 选择的内容还取决于您评估 XPath 的上下文(除非 XPath 以 /// 开头,否则是)。)

【讨论】:

我认为用户正在寻找一个 c#、xmlreader 解决方案而不是 xpath/xsl。也许使用 selectsinglenode 和 tony,s xpath。

以上是关于XSL FO 在具体注释之后读取第一个 fo:table 节点的主要内容,如果未能解决你的问题,请参考以下文章

XSL-FO 文档:在具体的 fo:table-row 中插入 break-before="page" 属性

xsl-fo 删除第一页的页码

XSL-FO:在页面序列中调用xsl-template?

试图在 XSL-FO 中插入空白页

有免费的 XSL-FO 编辑器吗? [关闭]

xsl:fo 在一个块中使用不同的颜色/字体