请帮助我以下
我猜它正常化空间功能,但不确定,究竟如何使用它。
1)如何找到所有空元素并从中删除空格
例如需要转换
<li> </li>
到
<li></li>
2)如何进行更精确的转换? 使用class&#34; list&#34;
在UL中查找所有空LI<ul class="list">
<li> </li>
<li>Hello world!</li>
</ul>
并将其转换为
<ul class="list">
<li></li>
<li>Hello world!</li>
</ul>
非常感谢
答案 0 :(得分:1)
首先,说你的输入XML包含&#34;空元素,其中包含空格&#34;是非常误导。具有空白字符作为其内容的元素不为空。相反,它们包含一个文本节点作为子节点,而该节点又只包含空格字符。
您可以使用XSLT元素strip-space
删除空元素的空白内容。
这仅影响元素的仅空白文本节点,例如
<li> </li>
另一方面,strip-space
不会删除
<li>dhd ddj d</li>
要规范化包含空格以外字符的文本节点的空白,请使用normalize-space()
函数:
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
normalize-space()
删除尾随空格,并用一个空格替换任何空格字符序列。
样式表(XSLT 1.0)
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:transform>
XML输入
<ul class="list">
<li> </li>
<li>Hello world!</li>
</ul>
XML输出
<ul class="list">
<li/>
<li>Hello world!</li>
</ul>
另一个代码示例,演示了normalize-space()
的使用:
XML输入
<ul class="list">
<li> </li>
<li>Hello world! </li>
</ul>
<强>样式表强>
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
</xsl:transform>
XML输出
<ul class="list">
<li/>
<li>Hello world!</li>
</ul>