我们知道,<xsl:variable>可以定义变量,而且在使用content赋值时,会生成一个临时结果树。那么,是否content赋值,只能生成临时结果树呢?
XPATH2.0引入了sequence的概念,其实,变量也可以利用content定义为序列。
XML源文件:
<?xml version="1.0"?>
<root>
<branch>18</branch>
<branch>13</branch>
<branch>17</branch>
<branch>90</branch>
</root>
我们可以利用如下XSLT文件:
<xsl:template match="/">
<xsl:variable name="var" as="xs:integer">
<xsl:sequence select="root/branch"/>
</xsl:variable>
<xsl:value-of select="$var" separator=","/>
</xsl:template>
将root下所有branch节点的文本组合成一个序列,并赋值给变量var。
那么这与
<xsl:template match="/">
<xsl:variable name="var" >
<xsl:value-of select="root/branch"/>
</xsl:variable>
<xsl:value-of select="$var" separator=","/>
</xsl:template>
有什么区别,我们有必要将变量赋值为序列吗?
第一段xslt代码生成一个序列,序列的每个元素都是xsl:integer类型。
第二段xslt代码生成一个临时结果树,临时结果树由一系列的文本节点组成。
序列相对于临时结果树有以下优点。
1,序列的生成和访问效率都要高于临时结果树。
2,临时结果树会失去数据的类型,因为一旦使用临时结果树,所有数据生成文本节点,文本节点的值的数据类型都是字符型。
但是我们运行第一段代码会报错:
A sequence of more than one item is not allowed as the value of variable $var
原因:
<xsl:variable>的as属性定义为xsl:integer,意为一个integer类型,这就要求<xsl:sequence>所生成的序列只能含有一个integer,但我们实际生成的是4 个integer。
修改办法:
<xsl:variable name="var" as="xs:integer*">
在xsl:integer后加一个星号,表示若干个integer元素。
分享到:
相关推荐
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:math="http://exslt.org/math" xmlns:testng="http://testng.org"> <xsl:output method="html" indent="yes" omit...
2. **使用`<xsl:variable>`和`<xsl:for-each>`** 创建一个模拟数组,我们首先定义一系列的变量,每个变量都包含一个值。然后使用`<xsl:for-each>`循环遍历这些变量,以执行数组操作。例如: ```xml <xsl:variable...
`<xsl:key>`定义索引,`<xsl:template match=pattern name=qname priority=number mode=tokens>`定义模板匹配规则,`<xsl:choose>`, `<xsl:when>` 和 `<xsl:otherwise>` 用于条件判断,而`<xsl:for-each>`则用于循环...
<li><xsl:value-of select="title" /></li> </xsl:for-each> </ul> </body> </html> </xsl:template> </xsl:stylesheet> ``` 这套“XML学习必备,详细课件”将涵盖以上所有知识点,并可能包括实例解析、实战...
1. **元素和属性**:XSL-FO包含一系列元素,如`<fo:block>`定义文本块,`<fo:table>`创建表格,`<fo:page-sequence>`定义页面序列等。每个元素都有特定的属性,用来控制它们的样式和行为。 2. **流与区域**:在XSL-...
<p><xsl:value-of select="card/description"/></p> <img src="{card/image}" alt="Card Image"/> </div> </xsl:template> </xsl:stylesheet> ``` 4. **交互与更新**:如果需要,还可以为XML卡片添加交互功能...
<xsl:template match="book[@category='fiction']"> <novel> <xsl:apply-templates select="@*|node()"/> </novel> </xsl:template> </xsl:stylesheet> ``` 五、XML Schema验证 XML Schema提供了一种定义XML...
<p>作者:<xsl:value-of select="/book/author"/></p> <p>年份:<xsl:value-of select="/book/year"/></p> </body> </html> </xsl:template> </xsl:stylesheet> ``` 3. **XLink(XML Linking Language)**:...
<h1><xsl:value-of select="."/></h1> </xsl:template> ``` 这里`match="name"`指定了匹配的XML元素,`<xsl:value-of select="."/>`则用于提取元素的文本内容。 4. **XPath 示例** 以下XPath表达式选取XML文档...
- 文件中提到的XSL元素,如<xsl:value-of>、<xsl:template>、<xsl:apply-templates>、<xsl:choose>,都是XSLT中的常用组件,用于在XSLT样式表中定义转换规则。 6. XML查询语言 - XPath用于在XML文档中进行导航,是...
每个元素都由开始标签和结束标签包围,如 `<element>` 和 `</element>`。元素可以包含其他元素、文本内容、属性等。例如: ```xml <book> <title>XML指南</title> <author>John Doe</author> <year>2005</year> ...
接下来,文件通过 `<MONTH-FREE-DAYS>` 和 `<SPECIAL-WORKHOURS-DAYS>` 元素分别定义了每个月的非工作日以及特定日子的工作小时数。 #### XML 文件结构 - **`<MONTH-FREE-DAYS>`**: 定义了每个月的非工作日。 - ...
- XSL由XSLT(Transformations)、XPath(Path)和XSL-FO(Formatting Objects)三部分组成。 - XSLT用于定义转换规则,将XML文档转换成新的XML或非XML格式。 - XPath是查询XML文档中节点的语言,为XSLT提供导航...
3. **指令(Instructions)**:如`<xsl:copy>`、`<xsl:value-of>`和`<xsl:for-each>`等,用于控制转换过程,如复制元素、输出值或循环遍历节点。 **XPath语言** 1. **路径表达式(Path Expressions)**:类似于文件...
- **选择和格式化数据**:使用`<xsl:stylesheet>`定义样式表,使用`<xsl:value-of>`显示数据,使用`<xsl:for-each>`遍历节点集合。 - **模板匹配**:使用`<xsl:template>`定义模板,通过`match`属性指定模板应用的...
</xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> ``` 7. **XML解析**:解析XML文档有两种主要方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM一次性加载整个文档到内存...
元素分为开启标签(如`<element>`)、关闭标签(如`</element>`)和自闭合标签(如`<empty/>`)。 3. 属性:元素可以有零个或多个属性,用于提供额外信息,如`<element attr="value">`。 4. 内容:元素可以包含文本...
1. XSLT(Extensible Stylesheet Language Transformations)用于转换XML文档,`<xsl:template>`定义模板规则,是XSL样式表达式的核心。 2. `<xsl:sort>`元素用于排序,通常与`<xsl:apply-templates>`或`<xsl:for-...