RegEx替换空的<p>标签XSLT 2.0?</p>

时间:2012-07-06 07:32:45

标签: regex xslt-2.0 removing-whitespace

我目前有一个XSLT 2.0样式表,我试图从输出中删除空P标签。我尝试过以下RegEx但没有成功:

replace($string,"&lt;p&gt;[\s{2,}]*&lt;/p&gt;","")

目前样式表的输出如下所示:

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

由于

:-)

2 个答案:

答案 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>/