我有一个像这样的 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="
">
<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/