代码之家  ›  专栏  ›  技术社区  ›  laconis

XSLT:在<p>元素中,如何用连续的<alinea>元素替换换行符(<br/>)?

  •  0
  • laconis  · 技术社区  · 7 年前

    <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 回复  |  直到 7 年前
        1
  •  1
  •   Kirill Polishchuk    7 年前

    Prob您可以使用以下内容:

    <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>
    
        2
  •  1
  •   michael.hor257k    7 年前

    <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

        3
  •  -1
  •   laconis    7 年前

    <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>
    

    有更漂亮的吗?