html - XSLT - 将 <p> 添加到文本字符串中而不是\n

标签 html xml xslt replace find

我有一个像这样的 XML 文档:

<xml>
  <item>
    <title>Article 1</title>
    <text><![CDATA[Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec lorem diam, eleifend sed mollis id, condimentum in velit.

Sed sit amet erat ac mauris adipiscing elementum. Pellentesque eget quam augue, id faucibus magna.

Ut malesuada arcu eu elit sodales sodales. Morbi tristique porttitor tristique. Praesent eget vulputate dui. Cras ut tortor massa, at faucibus ligula.]]></text>
  </item>
</xml>

“段落”之间有空行。

我需要使用 XSLT 转换,其中元素将包含

之间的每个文本段落。所以我想要的输出是这样的:

<h2>Article 1</h2>    
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec lorem diam, eleifend sed mollis id, condimentum in velit.</p>
<p>Sed sit amet erat ac mauris adipiscing elementum. Pellentesque eget quam augue, id faucibus magna.</p>
<p>Ut malesuada arcu eu elit sodales sodales. Morbi tristique porttitor tristique. Praesent eget vulputate dui. Cras ut tortor massa, at faucibus ligula.</p>

到目前为止,我的 XSLT 如下所示:

<xsl:template match="/">
        <html>
            <head>
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
                <title>Page title</title>
            </head>
            <body>
                <h1>Table of contents</h1>
                <ol>
                <xsl:for-each select="xml/item>
                        <li><xsl:value-of select="./title"/></li>
                </xsl:for-each>
                </ol>
                <hr/>
                <xsl:for-each select="xml/item">
                    <h2><xsl:value-of select="./title"/></h2>
                    <xsl:value-of select="./text" disable-output-escaping="yes"/>
                </xsl:for-each>
            </body>
        </html>
</xsl:template>

如何处理用段落 HTML 标签在正确位置替换 \n 的情况?我在这里检查了类似的问题,但我显然无法将它们应用于我的问题。

最佳答案

使用 XSLT 2.0,您可以使用正则表达式来标记字符串。

为此,请替换您的 <xsl:value-of>作者:

<xsl:analyze-string select="text" regex="&#xa;">
    <xsl:non-matching-substring>
        <p>
            <xsl:value-of select="."/>
        </p>
    </xsl:non-matching-substring>
</xsl:analyze-string>

在 XSLT 1.0 中,您必须定义一个模板,该模板将被递归调用并生成 <p>第一个换行符之前的子字符串元素。

关于html - XSLT - 将 <p> 添加到文本字符串中而不是\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10671444/

相关文章:

javascript - jQuery 自动完成 - 没有任何样式?

javascript:XML 到 IE 10 中的字符串

java - 在 Android 中使用 SAX 解析 XML

java - 带有 xml 节点(键)的 XSL 转换以数字开头失败

xml - 如何使用 XSLT 在 XML 中设置属性?

javascript - 关闭灯箱后不滚动(blueimp)

php - 无法在注册页面上发布错误

java - 正式或实用的 XML 标签长度限制?

html - Sublime Text 2 中关闭 HTML 标签的快捷方式

android - 膨胀类 android.support.v7.widget.SearchView 时出错