0

我目前有一个 XSLT 2.0 样式表,我正在尝试从输出中删除空的 P 标记。我尝试了以下正则表达式但没有成功:

replace($string,"<p>[\s{2,}]*</p>","")

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

<p>Some Text!</p>
<p></p>
<p>Some Text!</p>
<p> </p>
<p>  </p>
<p>Some Text!</p>

从这里我希望输出去除其中只有 1 个或多个空格的 P 标签,所以它看起来像这样:

<p>Some Text!</p>
<p>Some Text!</p>
<p>Some Text!</p>

谢谢

:-)

4

2 回答 2

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 的详细信息。

于 2012-07-06T10:09:32.130 回答
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>/.

于 2012-07-06T07:59:44.913 回答