我尝试使用某些XML代码,因此我希望删除换行符和特殊元素中的多个空白节点。
例如:
<root>
<elment1>
<element2>some text...
<element3>some text...</element3>
<element3>some text...</element3>
<element3>some text...
<element4>some text...</element4>
</element3>
</element2>
</elment1>
<elment1>
<element2>some text...
<element3>some text...</element3>
<element3>some text...</element3>
<element3>some text...
<element4>some text...</element4>
</element3>
</element2>
</elment1>
</root>
输出:
<root>
<elment1>
<element2>some text... <element3>some text...</element3> <element3>some text...</element3> <element3>some text... <element4>some text...</element4></element3></element2>
</elment1>
<elment1>
<element2>some text... <element3>some text...</element3> <element3>some text...</element3> <element3>some text... <element4>some text...</element4></element3></element2>
</elment1>
</root>
有没有办法用XSLT生成这个输出?
谢谢!
编辑:
我使用了以下模板:
<xsl:template match="element2//text()">
<xsl:analyze-string select="." regex="( | +)">
<xsl:matching-substring></xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
我使用了analyze-string,因为normalize-space()删除了一些必要的空格字符。我的问题是,为什么不是设置&#34;换行节点的模板&#34;在element2中?
编辑2:
我用了<xsl:output encoding="UTF-8" indent="yes" method="xml"></xsl:output>
。没有输出指令就可以了。
答案 0 :(得分:1)
为这些文本节点使用模板,可能使用normalize-space()
个足够的东西:
<xsl:transform 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="element2//text()">
<xsl:value-of select="normalize-space()"/>
</xsl:template>
</xsl:transform>
这样我得到了输出(http://xsltransform.net/pPJ8LUL)
<?xml version="1.0" encoding="utf-8"?><root>
<elment1>
<element2>some text...<element3>some text...</element3><element3>some text...</element3><element3>some text...<element4>some text...</element4></element3></element2>
</elment1>
<elment1>
<element2>some text...<element3>some text...</element3><element3>some text...</element3><element3>some text...<element4>some text...</element4></element3></element2>
</elment1>
</root>