XSLT:如何删除元素中的换行符

时间:2016-07-27 18:17:39

标签: xml xslt

我尝试使用某些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="(&#10;|  +)">
        <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>。没有输出指令就可以了。

1 个答案:

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