Используйте инструкцию обработки в XSLT - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу использовать инструкцию обработки в XSLT.

Логика: если есть <?Table Sideturn?>, следует добавить <context:sideturn>

Ввод:

<table-wrap id="tab_A.1" position="anchor">
  <?Table Sideturn?>
  <label>Table A.1</label>
  <caption/>
  <table>
    <tbody/>
  </table>
</table-wrap

Вывод должен быть:

<context:sideturn>
  <table/>
</context:sideturn>

Пробный код:

<xsl:template match="table">
   <xsl:choose>
      <xsl:when test="preceding-sibling::processing-instruction('Table Sideturn')">
         <context:sideturn>
            <table/>
         </context:sideturn>
      </xsl:when>
      <xsl:otherwise>
         <context:not-sideturn>
            <table/>
         </context:not-sideturn>
      </xsl:otherwise>
   </xsl:choose>
</xsl:template>

Над моим xpath не работает хорошо. Как я могу решить это? Я использую XSLT 2.0.

Спасибо.

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Инструкция обработки

<?Table Sideturn?>

Имеет имя Table и значение Sideturn. Поэтому вам нужно проверить его на основе его имени и значения:

<xsl:when
  test="preceding-sibling::processing-instruction('Table')[normalize-space() = 'Sideturn']">

Как отмечалось в комментариях, я использую normalize-space() здесь, поскольку некоторые процессоры могут трактовать значение как наличие пробела вначало.

1 голос
/ 04 ноября 2019

Вы можете попробовать это:

<xsl:when test="preceding-sibling::processing-instruction('Table Sideturn')">

Вместо

<xsl:when test="preceding-sibling::processing-instruction('Table')">

Поскольку в имени элемента не допускается пробел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...