我目前有一个XSLT 2.0样式表,我试图从输出中删除空P标签。我尝试过以下RegEx但没有成功:
replace($string,"<p>[\s{2,}]*</p>","")
目前样式表的输出如下所示:
<p>Some Text!</p>
<p></p>
<p>Some Text!</p>
<p> </p>
<p> </p>
<p>Some Text!</p>
从这里我希望输出去除其中只有一个或多个空格的P标记,所以它看起来像这样:
<p>Some Text!</p>
<p>Some Text!</p>
<p>Some Text!</p>
由于
:-)
答案 0 :(得分:2)
我会写一个处理第一个结果的XSLT样式表,你只需要两个模板,即
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p[not(*) and not(normalize-space())]"/>
</xsl:stylesheet>
当然,另一种方法是重写原始样式表,根本不生成空p
元素,但为此我们需要查看XML输入和XSLT的详细信息。
答案 1 :(得分:0)
我建议使用下一个正则表达式:/<p>(|\s+)<\/p>/
<强>解释强>
<p> # Match <p>
( # Try to match...
|\s+ # nothing or the space character any number of times
) # ...match end
<\/p> # Match </p>
您可以通过链接http://regexr.com?31f6a查看它(确保切换到'替换'模式并将替换文本设置为空)。
<强>更新强>
实际上,(|\s)
表达式和\s*
执行相同的操作(感谢Rawling),因此您可以将主表达式编写为/<p>\s*<\/p>/
。