首页 > 解决方案 > 序列是如何拼接的,为什么我的变量值是文档节点?

问题描述

看下面的代码:

<?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="3.0">    
<xsl:output indent="yes"/>    
<xsl:template match="/">
    <root>
      <xsl:variable name="v1">
          <xsl:variable name="a1" select="137"/>
          <xsl:variable name="a2" select="(1, 3, 'abc')"/>              
          <xsl:variable name="a3" select="823"/>

          <xsl:sequence select="$a1"/>
          <xsl:sequence select="$a2"/>
          <xsl:sequence select="$a3"/>
      </xsl:variable>

        <xsl:variable name="v2" as="item()+">
            <xsl:variable name="b1" select="137"/>
            <xsl:variable name="b2" select="(1, 3)"/>
            <xsl:variable name="b3" select="823"/>
            <xsl:variable name="b4" select="'abc'"/>

            <xsl:sequence select="$b1"/>
            <xsl:sequence select="$b2"/>
            <xsl:sequence select="$b3"/>
            <xsl:sequence select="$b4"/>
        </xsl:variable>

      <count>
          <xsl:text>v1 count is: </xsl:text>
          <xsl:value-of select="count($v1)"/>              
      </count>
        <count>
            <xsl:text>v2 count is: </xsl:text>
            <xsl:value-of select="count($v2)"/>              
        </count>            
        <count>
            <xsl:text>a2 count is: </xsl:text>
            <xsl:value-of select="count((1, 3, 'abc'))"/>              
        </count>        
    </root>
</xsl:template>

</xsl:stylesheet>

结果输出为:

<root>
    <count>v1 count is: 1</count>
    <count>v2 count is: 5</count>
    <count>a2 count is: 3</count>
</root>

为什么v2 count不同于v1 count? 他们似乎有相同的项目。序列如何拼接?为什么被v1视为“文档节点”类型?

文字“看起来你的帖子主要是代码;请添加更多细节。” 总是阻止我提交。

标签: xsltxslt-3.0

解决方案


好吧,你有不同的变量声明,一个使用as属性,另一个不使用。

而且您似乎已经推断出您的第一个没有任何as声明的案例会导致文档节点(包含内容)。

至于各种选项的血腥细节,该规范在https://www.w3.org/TR/xslt-30/#temporary-trees中处理了您的第一个案例,并概述了交互中的各种选项asselect内容构造函数xsl:variablehttps://www.w3.org/TR/xslt-30/#variable-values


推荐阅读