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 节点的主要内容,如果未能解决你的问题,请参考以下文章