返回类型<xsl:variable name =“pubDate”select =“publicationDate”>,节点集还是字符串?</xsl:variable>

时间:2014-09-10 17:50:51

标签: xml xslt

我是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;也是一个字符串。

这是一些自动类型转换还是其他什么?

1 个答案:

答案 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包含“结果树片段”。您仍然可以在字符串函数中使用它,但在这种情况下它实际上会使用整个结果树片段的字符串值。