我的应用程序中有一个 servlet 过滤器,它拦截所有传入的请求,并尝试从传入的 XML 中去除空格,并将生成的“干净”XML 写入响应。我正在使用 XSLT 来实现这一点。请参阅下面的 XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
然而,这并没有按预期工作。生成的 XML 与原始 XML 相同(尽管在样式表中使用了 。
请帮助我解决这个问题。
Regards,
- 阿什什
目前尚不清楚您打算获得什么输出以及您期望从中获得什么xsl:strip-whitespace
首先。但需要注意的一件事是它不会剥离all空白,但仅限于“通常”规则下被视为无关紧要的空白。特别是,根据 XSLT 1.0 规范:
文本节点永远不会被删除,除非它只包含空白字符。
因此,例如:
<foo>
<bar> </bar>
</foo>
将被精简为:
<foo><bar/></foo>
因为它有 3 个纯空白文本节点(之后<foo>
和之前<bar>
, 之间<bar>
and </bar>
, 之后</bar>
和之前</foo>
).
另请注意,因为您有<xsl:output indent="yes">
在你的样式表中,它最终会被转换为:
<foo>
<bar/>
<foo>
在输出中。
另一方面,这个:
<foo>
text1
<bar> text2 </bar>
text3
</foo>
根本不会被剥离,因为它包含的所有文本节点都不是纯粹的空白节点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)