将对象转换为字符串。
string string(object?)
备注
将节点集转换为字符串
string() 函数通过返回节点集中第一个节点的字符串值,将节点集转换为字符串,有时,这样做可能会产生意外的结果。 例如,如果您处在下面的 <test> 节点上:
<test>
<item>Apple</item>
<item>Banana</item>
<item>Orange</item>
</test>
以下 string() 函数调用返回第一个节点字符串(“Apple”):
string(//text())
如果希望 string() 函数将所有子文本串联起来,必须传递单个节点,而不是节点集。 例如,以下 string() 函数调用将返回“AppleBananaOrange”:
string(.)
所有接受字符串参数的 XPath 函数都是如此。 例如,以下 contains() 函数调用:
contains(//text(),'Banana')
返回值 false。 在此示例中,出现这种情况的原因是,第一个参数(“//text()
”)使用 string(//text())
转换为字符串,只会搜索第一个节点字符串(“Apple”)。 反之,如果 contains() 函数修改为第一个参数使用点选择符(“.”),如下所示:
contains(.,'Banana')
contains() 返回的值将为 true,因为将搜索字符串“AppleBananaOrange”。
![]() |
---|
如果节点集为空,则返回一个空字符串。 |
在节点集转换中处理空白
包含空白的节点集可以通过下列方式之一进行处理:
使用 <xsl:strip-space> 元素 指令去除空白节点
使用 <xsl:for-each> 元素 指令循环通过所有子代节点(包括空白节点和包含文本的节点)。
例如,如果 .//text()
表达式应用于以下元素,以选择其内部文本内容:
<name>element</name>
默认情况下,将返回如下所示的三个节点的节点集,其中第一个和第三个节点表示实际文本数据(“element”)旁边的前导和尾随空白节点:
Node 1:   
Node 2: element
Node 03:
要忽略纯空白节点,可以如下所示在 XSLT 样式表中指定 <xsl:strip-space> 指令:
<xsl:strip-space elements="name"/>
另外,可以使用如下所示的 <xsl:for-each> 循环示例循环通过每个子代节点并反复进行搜索:
<xsl:for-each select=".//text()">
<xsl:if test="contains(., 'element')" >
…
</xsl:if>
</xsl:for-each>
将数字转换为字符串
如下所示将数字转换为字符串。
NaN 转换为字符串 NaN。
正零转换为字符串“0”。
负零转换为字符串“0”。
正无穷大转换为字符串“Infinity”。
负无穷大转换为字符串“-Infinity”。
如果数字是整数,数字以十进制格式表示,没有小数点,没有前导零,如果数字是负数,前面有一个减号 (-)。
否则,数字以十进制格式表示,包含小数点,并且小数点前面至少有一位,小数点后面也至少有一位,如果数字是负数,前面有一个减号 (-);小数点前面不得包含前导零,除非小数点前面必须有一位;除了小数点后面必须包含的一位之外,必须还包含所需的相应位数,用于将该数字与所有其他 IEEE 754 数值区分开来。
![]() |
---|
在向用户显示时,不能使用 string() 函数将数字转换为字符串。XSL 转换 (XSLT) 中的 format-number() 函数和 <xsl:number> 元素提供此功能。
|
将布尔值转换为字符串
布尔值 false 转换为字符串“false”。 布尔值 true 转换为字符串“true”。
将对象转换为字符串
不属于四种基本类型的对象通过该类型相应的方式转换为字符串。
如果省略了该参数,默认的节点集中唯一的成员是上下文节点。
示例
以下示例阐释如何在 XPath 表达式中使用 string()
函数。 在两种情况下(见下面 XSLT 文件中的加粗说明),该函数用于确保其参数被视为字符串表达式。
XML 文件 (string.xml)
XSLT 文件 (string.xsl)
输出
1 + 2.00 = 3
One + 2.00 = NaN
1 - 2.00 = -1
1 * 2.00 = 2
-1 div 0.0 = -Infinity
5 mod 2 = 1
5 mod 2.5 = 0
5 mod 2.25 = 0.5
0 & 1 = Invalid arithmetic operation