XSLT 2.0 разделил элемент вокруг указанного потомка - PullRequest
0 голосов
/ 25 сентября 2018

Мне нужно определить способ разделения элемента вокруг указанного дочернего элемента при его обнаружении.Пример ввода:

<root>
...
<span>Here's that <link>link</link> for you.</span>
...
</root>

Требуемый вывод:

<root>
...
<span>Here's that </span><link>link</link><span> for you.</span>
...
</root>

Я знаю, что могу использовать tokenize, чтобы разбить строку вокруг заданного текста, но мне нужно разбить элемент вокруг заданного элемента,и я не уверен, что лучший способ решить эту проблему.

Обратите внимание, что я работаю с сильно ограниченным DTD, поэтому наиболее сложные случаи, которые мы могли бы видеть, выглядели бы примерно так:

Пример ввода:

<root>
...
<span>Here's that <link>link</link> and this <link>link</link>and this <link>link</link>for you.</span>
...
</root>

Желаемый вывод:

<root>
...
<span>Here's that </span><link>link</link><span> and this </span><link>link</link><span> and this </span><link>link</link><span> for you.</span>
...
</root>

1 Ответ

0 голосов
/ 25 сентября 2018

В XSLT 2 или 3 это похоже на проблему группировки, решаемую с помощью (при условии, что вы хотите применить это решение только к span элементам, имеющим хотя бы link дочерний элемент):

  <xsl:template match="span[link]">
      <xsl:for-each-group select="node()" group-adjacent="boolean(self::link)">
          <xsl:choose>
              <xsl:when test="current-grouping-key()">
                  <xsl:apply-templates select="current-group()"/>
              </xsl:when>
              <xsl:otherwise>
                  <span>
                      <xsl:apply-templates select="current-group()"/>
                  </span>
              </xsl:otherwise>
          </xsl:choose>
      </xsl:for-each-group>
  </xsl:template>

Плюс шаблон преобразования идентичности, конечно, чтобы скопировать / обработать остальное.Пример XSLT 3 онлайн на https://xsltfiddle.liberty -development.net / 6qVRKwK / 1 , XSLT 2 http://xsltransform.hikmatu.com/gWmuiHN.

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