xsl:variable的应用和赋值的解析,不同赋值的类型不同
xsl:variable的应用和赋值的解析,不同赋值的类型不同 。xsl:variable是xslt定义的变量,不过这个变量和我们平时的编程有些不一样,就是给这个变量赋值之后,这个变量就没办法改变了,可以先看一些简单的例子来了解下:
<xsl:variable name="Room" select="'Single Room'" />
上面的变量Room的值就是Single Room了,没办法改变了。简单的定义方法有很多种,上面这个例子定义的就是一个String类型的变量。下面我们来开始了解一下比较难的variable的定义方法吧!
<xsl:variable name="RInfo" select="$descContent/Room[@Code=$roomCode]"/> <xsl:variable name="RInfo"> <xsl:value-of select="$descContent/Room[@Code=$roomCode]"/> </xsl>
xslt中,上面这两个variable是不一样的,前者是一个node-set,选择的是整个节点。后者是一个value,是一个string类型的,就是把node里面的value转化成string类型。所以有的同学想要说改变一下这个variable的值,变成可以选择的,写成下面这样子:
<xsl:variable name="RInfo"> <xsl:choose> <xsl:when test="/SourceDoc/@BrandCode='Break易站'"> <xsl:value-of select="$descContent/Room[@ID=$HCDroomID]"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$descContent/Room[@Code=$roomCode]"/> </xsl:otherwise> </xsl:choose> </xsl>
这个样子就会报错了。而且在XPath 1.0中没有条件表达式,最好的解决办法是能搬到xPath 2.0上面去,这样很多问题都会解决了。或者可以用下面这个办法,就是当里面的条件等于HCDroomTypeID或者roomTypeCode的时候,都会选择这个节点。这样子就不错造成系统报错。
<xsl:variable name="RInfo" select="$descContent/Room[@Code=$roomCode or @ID=$HCDroomID ]"/>
但是有时候需要的不只是@Code这个属性,还需要@ID这个属性,其实也是一样的:
上面这段,能选择到的node-set,除非@code和@ID没有值,不然都会找到这个node-set。如果大家的需求,非要用条件选择的话,建议用call-template.
variable的Boolean布尔值
<xsl:variable name="isNew" select="count($RInfo) = 0 or $isClone"/> <xsl:variable name="isNew"> <xsl:value-of select="count($roomInfo) = 0 or $isClone"/> </xsl>
上面两个variable有区别么?当然有区别呀!第一个是Boolean布尔值,第二个是String类型的。但这种布尔值遇到条件选择的话,应该怎么办呢?还是很好解决的~~
<xsl:variable name="isNewValue"> <xsl:choose> <xsl:when test="/SourceDoc/@BrandCode='Break易站'"> <xsl:value-of select="count($HCDroomInfo) = 0 or $isClone"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="count($roomInfo) = 0 or $isClone"/> </xsl:otherwise> </xsl:choose> </xsl> <xsl:variable name="isNew" select="$isNewValue = 'true'"/>
上面这种解决方法比较简单粗暴,不过还是能够完美解决的,代码能简单就简单。这里还是要吐槽一下,是谁设置xsl中变量赋值之后就不能改了,要不然,就不用那么折腾了,不能改还叫做变量,估计定义这个xml的人也是有才。
本文内容来自:xsl:variable的应用和赋值的解析,不同赋值的类型不同 – Break易站
---Author: Arvin Chen ---Web Address: www.breakyizhan.com (Break易站)
原文地址:https://www.cnblogs.com/breakyizhan/p/13287232.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS下的JDK安装
- python 技术篇-3行代码搞定图像文字识别,pytesseract库实现
- hadoop2.6.0完全分布式手动安装
- Python 库安装问题:ModuleNotFoundError: No module named 'windows'. 解决方法
- Python各种文件删除函数的功能区分!
- Python 技术篇-轻松操作windows系统电脑鼠标指针移动、点击
- Typora Picgo自动使用图床上传图片
- 【Python】文件的选择性压缩和全压缩,一般人不告诉的实用小技巧!
- 搭建hadoop集群虚拟机试验环境
- PLSQL-简单的语句块及变量的定义
- Python 技术篇-使用PIL库等比例压缩、缩小图片
- linux 安装并配置zsh
- 听音乐不过瘾?自制一个音乐播放器!【附带函数源码】
- Python 技术篇-3行代码实现Gif动画生成,Gif动画素材获取方法
- Linux 文件隐藏权限