我是xsl新手并使用版本1.0
这是一些xml源
<?xml version="1.0"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<company>Columbia</company>
<publicationDate>03/31/1985</publicationDate>
</cd>
</catalog>
从上面的xml内容中,我在xsl代码中设置了一个变种
<xsl:variable name="pubDate" select="//publicationDate" />
我认为变量&#39; pubDate&#39;应该包含一个节点集,因为&#39; // publicationDate&#39;但后来我意识到了 可以应用字符串函数,例如subString($ pubDate,1,4),这暗示了&#39; pubDate&#39;也是一个字符串。
这是一些自动类型转换还是其他什么?
答案 0 :(得分:2)
在XSLT 1.0中$pubDate
是一个节点集。如果要在需要字符串值作为参数的函数中引用它,它将使用节点集中第一个节点的字符串值。也就是说,它将获取节点和所有后代节点的文本值。因此,如果您的第一个节点实际上是这样的:
<publicationDate><mm>03</mm><dd>31</dd><yy>1985</yy></publicationDate>
然后substring($pubDate, 1, 4)
仍会输出0331
。
但XSLT 2.0中的情况会有所不同。它将包含一个序列,如果您尝试相同的子字符串表达式,您将得到错误“不允许多个项目的序列作为substring()的第一个参数”
编辑:现在,如果你这样做了...... <xsl:variable name="pubDate">
<xsl:copy-of select="//publicationDate" />
</xsl:variable>
然后$pubDate
包含“结果树片段”。您仍然可以在字符串函数中使用它,但在这种情况下它实际上会使用整个结果树片段的字符串值。