我是法国人,对于拼写错误对不起... 我从未做过一些XSL 我有一个我不知道输入的XML,我尝试用空格替换双空格,用一个空格制表,用XSL删除\ n和\ r \ n
我在互联网上看到了normalize-space()或翻译,但我不确定这是解决方案......
你能帮帮我吗?
由于
XML文件的例子可能是:
<?xml version="1.0" encoding="UTF-8"?>
<input>
something with
a lot of space and new lines
</input>
<input2>
<subInput2>
something with
a lot of space and new lines
</subInput2>
</input2>
答案 0 :(得分:1)
是的,normalize-space()是要走的路..它在所有版本的xslt中都有效。有关详细信息,请参阅http://www.w3schools.com/xsl/xsl_functions.asp。
我真的应该在xml中添加额外的空格,除非你明确地将选项设置为&lt; xsl:preserve-space&gt;,否则将以与html相同的方式忽略额外的空格。所以我会说 - 作为一个经验法则 - 你并不总是需要在看到额外空间的地方使用normalize-space()。
示例:
输入:
<?xml version="1.0" encoding="UTF-8"?>
<input>
something with
a lot of space and new lines
</input>
真正简单的xsl:
<xsl:template match="/">
<result>
<xsl:value-of select="normalize-space(.)"/>
</result>
</xsl:template>
结果:
<result>something with a lot of space</result>
答案 1 :(得分:1)
要规范化整个XML文档的所有文本节点中的空格,请执行以下操作:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()" priority="1">
<xsl:value-of select="normalize-space()"/>
</xsl:template>
</xsl:stylesheet>
请注意,这不会影响属性中的文本。如果您也想要处理这些,请执行以下操作:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="normalize-space()"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="text()" priority="1">
<xsl:value-of select="normalize-space()"/>
</xsl:template>
</xsl:stylesheet>