Xslt 从空元素中删除空格

Xslt 从空元素中删除空格,xslt,space,Xslt,Space,请帮我做以下事情 我猜这是规范化空间函数,但不确定如何确切地使用它 1) 如何查找所有空元素并从中删除空格 例如,需要进行转换 <li> </li> 到 2) 如何进行更精确的变换? 查找UL中具有类“列表”的所有空LI 你好,世界 并将其转换为 <ul class="list"> <li></li> <li>Hello world!</li> </ul>

请帮我做以下事情

我猜这是规范化空间函数,但不确定如何确切地使用它

1) 如何查找所有空元素并从中删除空格

例如,需要进行转换

<li>     </li>
  • 2) 如何进行更精确的变换? 查找UL中具有类“列表”的所有空LI

    • 你好,世界
    并将其转换为

    <ul class="list">
        <li></li>
        <li>Hello world!</li>
    </ul>
    
    • 你好,世界

    非常感谢

    首先,说您的输入XML包含“带空格的空元素”是非常误导人的。以空格字符作为内容的元素根本不是空的。相反,它们包含一个文本节点作为子节点,而子节点又只包含空白字符

    您可以使用XSLT元素
    strip space
    删除其他空元素的空白内容

    例如,这只影响元素的纯空白文本节点

    <li>    </li>
    
    要规范化包含除空格以外的字符的文本节点的空格,请使用
    normalize-space()
    函数:

    <xsl:template match="text()">
        <xsl:value-of select="normalize-space(.)"/>
    </xsl:template>
    
    XML输入

    <ul class="list">
        <li>    </li>
        <li>Hello world!</li>
    </ul>
    
    <ul class="list">
       <li/>
       <li>Hello world!</li>
    </ul>
    
    <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>
    
    <ul class="list">
       <li/>
       <li>Hello world!</li>
    </ul>
    
    样式表

    <ul class="list">
        <li>    </li>
        <li>Hello world!</li>
    </ul>
    
    <ul class="list">
       <li/>
       <li>Hello world!</li>
    </ul>
    
    <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>
    
    <ul class="list">
       <li/>
       <li>Hello world!</li>
    </ul>
    
    
    
    XML输出

    <ul class="list">
        <li>    </li>
        <li>Hello world!</li>
    </ul>
    
    <ul class="list">
       <li/>
       <li>Hello world!</li>
    </ul>
    
    <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>
    
    <ul class="list">
       <li/>
       <li>Hello world!</li>
    </ul>
    
    • 你好,世界

    xslt 1.0中存在关于修剪的问题。看看这里:@parakmiakos在我看来,您链接到的问题是关于其他东西的(例如,在Java中实现的修剪)。这个问题是关于只包含空格的XML元素的。非常(真的)感谢您提供如此详细的有用答案@用户3497585不客气。请考虑接受这个答案,如果它解决了你的问题(点击左边的嘀嗒声,让它看起来是绿色的)。例如,对您之前提出的问题也要这样做。