我无法通过 XSLT 在 HTML 中正确格式化 XML 数据。以下是接收数据的方式:
This is some text. <p>
This is more text. <p>
This is even more text. <p>
<a href=www.google.com>Google's website</a> <p>
Return to my website.
所以我有递归(我认为这是在这种情况下使用的)设置。它将为每个 p 标签创建一个新段落,并删除我们网站上的 p 标签。这是代码:
<xsl:template name="replace_p">
<xsl:param name="text"/>
<xsl:choose>
<xsl:when test="contains($text, '<P>')">
<xsl:value-of select="substring-before($text, '<P>')"/>
<br/><br/>
<xsl:call-template name="replace_p">
<xsl:with-param name="text" select="substring-after($text, '<P>')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
这很好用……除非我们有链接。我希望用户能够点击链接而不是看到 a href 标记和代码。唯一的问题是......当替换 p 模板运行时我该怎么做。我的尝试(我觉得我的想法是正确的,虽然可能不是很接近):
<xsl:template name="replace_p">
<xsl:param name="text"/>
<xsl:if test="contains($text, '<P>')">
<xsl:choose>
<xsl:when test="substring-before($text, '<P>') and substring-before($text, '<a href=')">
<xsl:value-of select="substring-before(substring-after($text, '<a href='), '>')"/>
<br/><br/>
<xsl:call-template name="replace_p">
<xsl:with-param name="text" select="substring-after($text, '<P>')"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="substring-before($text, '<P>')">
<xsl:value-of select="substring-before($text, '<P>')"/>
<br/><br/>
<xsl:call-template name="replace_p">
<xsl:with-param name="text" select="substring-after($text, '<P>')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
我先测试 p 标签和 href 标签测试,因为我希望它在进入下一个 when 语句之前检查两者。但是......我不知道它是否一定是这样工作的。它会在进入下一个 when 语句之前检查第一个 p 标签和一个 href 标签吗?
我也知道我需要创建一个标签和一个 href 属性,但我想努力让正确的数据首先出现。:)
如果需要任何其他信息,请告诉我。
谢谢!