XSL FO Чтение первого fo: table node сразу после конкретного комментария - PullRequest
0 голосов
/ 21 декабря 2018

У меня большой FO-файл XSL.

В этом файле у меня есть несколько вложенных объектов fo: table, и все они не идентифицируются с помощью уникального атрибута id, что позволяет искать каждый из них по уникальному Id.Каждый fo: table имеет в начале комментарий, который содержит уникальный идентификатор, но этот идентификатор не всегда один и тот же, каждый раз он отличается даже для одной и той же таблицы.В любом случае, я знаю, как искать этот комментарий, анализируя файловую структуру, которая всегда одинакова.

Теперь у меня есть объект комментария, который я хочу, но теперь я сталкиваюсь со следующей проблемой: мне нужно получитьпервый объект сразу после этого комментария, в данном случае первый объект 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 голосов
/ 21 декабря 2018

В шаблоне комментария выберите fo:table:

following-sibling::*[1]

. Выберите fo:table

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

(обратите внимание, что это будет работать только изродительский узел fo:table. Выбор XPath зависит также от контекста, в котором вы оцениваете XPath (если только XPath не начинается с / или //).

...