标准化空间的多个项的序列

时间:2018-01-12 15:03:10

标签: xml xslt transformation

我必须得到一个元素的内容,该元素在元素的内容之间也有xml-tags。因此,我得到一个项目序列,这会产生问题,因为我必须将结果传递给normalize-space函数,该函数不允许多个项目的序列。以下是错误消息:

“不允许多个项目的序列作为normalize-space()的第一个参数(”Hello ...“,”world“,...)”

XSL代码:

<xsl:value-of select="normalize-space(preceding-sibling::node()/text())"/>

XML:

<title>Hello
        <tag1>world</tag1>
            Hello2<tag1><tag2>world2
            Hello3</tag2></tag1><tag1><tag2>world3
            Hello4</tag2><tag3>world4
    Hello5</tag3></tag1></title>

我正在寻找一种简单的方法将字符串的结果序列组成一个字符串,我可以将其用于规范化空间函数。作为toString()函数的东西。但我愿意接受任何好的建议,这可以解决我的问题!

2 个答案:

答案 0 :(得分:0)

通过将术语更改为:我已解决了我的问题: <xsl:value-of select="normalize-space(preceding-sibling::title)"/>

答案 1 :(得分:0)

我认为你对上下文节点条件有误解。但如果title元素确实是上下文节点,则获取title元素的规范化字符串值的最简单方法是使用normalize-space(string(.))string(.)返回上下文节点的字符串值。

[输入]

<?xml version="1.0" encoding="UTF-8"?>
<title>Hello
    <tag1>world</tag1>
    Hello2<tag1><tag2>world2
        Hello3</tag2></tag1><tag1><tag2>world3
            Hello4</tag2><tag3>world4
                Hello5</tag3></tag1></title>

[样式表]

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:template match="title">
        <result>
            <xsl:value-of select="normalize-space(string(.))"/>
        </result>
    </xsl:template>

</xsl:stylesheet>

[结果]

<?xml version="1.0" encoding="UTF-8"?><result>Hello world Hello2world2 Hello3world3 Hello4world4 Hello5</result>