从空元素中删除空格

时间:2014-09-18 09:30:34

标签: xslt space

请帮助我以下

我猜它正常化空间功能,但不确定,究竟如何使用它。

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>

非常感谢

1 个答案:

答案 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>