XSL FO在发表具体评论后立即阅读第一个fo:table节点

时间:2018-12-21 09:28:51

标签: c# xml xsl-fo xmldocument xmlreader

我有一个很大的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-width="14.35cm" /> 
<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 个答案:

答案 0 :(得分:0)

从注释模板中,选择fo:table

following-sibling::*[1]

要选择fo:table

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

(请注意,这仅在fo:table的父节点上起作用。XPath选择的内容还取决于您评估XPath的上下文(除非XPath以/或{开头{1}},就是)。