XSLT: в элементе <p>, как заменить разрыв строки () с последовательным элементом <alinea>? - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь преобразовать элемент <p> с <br/> элементами внутри в несколько <alinea>subtext</alinea>.Например:

<p>subtext<br/>some more text<br/> some more subtext</p>

Из предыдущего <p> я надеялся просто заменить все <br/> на </alinea><alinea>, поскольку шаблон для <p> уже открывает элемент <alinea>.

<xsl:template match="p">
    <para><alinea><xsl:apply-templates/></alinea></para>
</xsl:template>

<xsl:template match="br">
    </alinea><xsl:apply-templates/><alinea>
</xsl:template>

Но это не валидно.

Ожидаемый результат:

<para>
   <alinea>
     subtext
   </alinea>
   <alinea>
     some more text
   </alinea>
   <alinea>
     some more subtext
   </alinea>
 </para>

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Возможно, вы можете использовать что-то вроде этого:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="p">
    <para>
      <xsl:apply-templates/>
    </para>
  </xsl:template>

  <xsl:template match="text()">
    <aline>
      <xsl:value-of select="."/>
    </aline>
  </xsl:template>

  <xsl:template match="br"/>

  <xsl:template match="div">
    <blockquote>
      <xsl:value-of select="."/>
    </blockquote>
  </xsl:template>

</xsl:stylesheet>
0 голосов
/ 08 февраля 2019

Это довольно легко сделать в XSLT 2.0:

<xsl:template match="p">
    <para>
        <xsl:for-each-group select="node()" group-starting-with="br">
            <alinea>
                <xsl:copy-of select="current-group()[not(self::br)]" />
            </alinea>   
        </xsl:for-each-group>
    </para>
</xsl:template>

Демо : https://xsltfiddle.liberty -development.net / 6r5Gh2Q

0 голосов
/ 08 февраля 2019

Я нашел (грязный?) Способ заменить <br> на </alinea><alinea>:

  <xsl:template match="br">
     <xsl:value-of disable-output-escaping="yes">
        &lt;/alinea&gt;&lt;alinea&gt;
     </xsl:value-of>
  </xsl:template>

Что-нибудь красивее?

...