需要使用 XSL 删除空格元素值



我有两种类型的XML元素,一种类型是

第一个 XML:

<Body>
<h1>aaa</h1>
<h1>bbb</h1>
<h1>ccc</h1>
</Body>

第二个 XML:

<Body>
<h1> </h1>
<h1>aaa</h1>
<h1>bbb</h1>
</Body>

我正在使用的 XSL

<xsl:strip-space elements="h1"/>
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
</xsl:template>
<xsl:template match="Body">
<xsl:copy>
<h1><xsl:value-of select="h1"/></h1>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="h1"/>

输出我为第一个 XML 正确,如下所示:

<Body>
<h1>aaa bbb ccc</h1>
</Body>

但即使我使用条带空格元素作为第二个 xml 的 h1,我也得到如下:

<Body>
<h1> aaa bbb</h1>
</Body>

预期输出如下所示

<Body>
<h1>aaa bbb</h1>
</Body>

我需要删除 h1 的空间元素。但是由于这个标签,它甚至结合了空间。我使用了优先级,并在模板中使用了单独的 h1[normalize-space((] 标签。但它不起作用。有任何方法可以避免这种情况。请指教。我正在使用XSLT 2.0和saxon-PE 9.6.0.7。提前致谢

我认为使用<h1><xsl:value-of select="h1[normalize-space()]"/></h1>而不是<h1><xsl:value-of select="h1"/></h1>应该很容易解决。

需要删除 h1 的空格元素。

您看到的空间不是第一个h1元素中的空间。它是第一个h1中的空字符串和第二个h1元素中的"aaa"字符串之间的分隔符。您可以通过执行以下操作来验证这一点:

<xsl:template match="Body">
<xsl:copy>
<h1><xsl:value-of select="h1" separator="-"/></h1>
</xsl:copy>
</xsl:template>

演示:http://xsltransform.net/pNmBy1v

要删除多余的空间,您可以排除空的h1元素(正如Martin Honnen在我写这篇文章时所建议的那样(,或者normalize-space()应用于结果。

最新更新