XML 知识量:7 - 28 - 99
使用XSL显示XML时,是通过XPath表达式来设置select或match属性值的。XPath是一种专门用于在XML文档中查找信息的语言。
在XPath中,有以下几类节点:
元素
属性
文本
命名空间
处理指令
注释
文档(根)节点。
其中,XML文档作为节点树来对待,树的根被称为文档节点或根节点。
在XPath中,节点间存在以下几种关系:
父:每个元素及属性都有一个父节点。
子:元素可以有0到多个子节点。
同胞:拥有相同父节点的节点称为同胞。
祖先:某节点的父元素以及其父元素的父元素,依次类推,这些节点统称为该元素的祖先。
后代:某节点的子元素以及其子元素的子元素,依次类推,这些节点统称为该元素的后代。
XPath通过路径表达式来选取XML文档中的节点或节点集。
1、路径表达式。常用的路径表达式如下:
表达式 | 说明 |
---|---|
nodename | 选取此节点的所有子节点。 |
/ | 从根节点选取。 |
// | 从匹配的当前节点开始选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
.. | 选取当前节点的父节点。 |
@ | 选取属性。 |
下面是一些例子:
school:选取school元素的所有子节点。
/school:从根元素开始选取school元素(school的绝对路径)。
school/student:选取所有属于school的子元素的student元素。
//student:选取所有student元素,不管它们的位置位于什么地方。
school//student:选取所有属于school元素的后代元素中的student元素,不管它们位于school之下的什么位置。
//@name:选取所有名为name的属性。
2、谓语。用于查找某个特定的节点或包含某个指定值的节点。常用的带谓语的表达式如下:
表达式示例 | 说明 |
---|---|
/school/student[1] | 选取school的第一个student子元素。 |
/school/student[last()] | 选取school的最后一个student子元素。 |
/school/student[last()-1] | 选取school的倒数第二个student子元素。 |
/school/student[position()<4] | 选取school的前3个student子元素。 |
//name[@id] | 选取所有带有id属性的name元素。 |
//name[@id=1001] | 选取所有带有id属性,且属性值为1001的name元素。 |
/school/student[age>18] | 选取school的student子元素,且其age元素大于18。 |
/school/student[age>18]/name | 选取school的student元素的name元素,且其中的age元素大于18。 |
3、选取未知节点。可以通过通配符选取未知的XML元素。常用的通配符有:
*:表示匹配任何元素节点。
@*:表示匹配任何属性节点。
node():表示匹配任何类型的节点。
XPath路径表达式的返回值包括节点集、字符串、布尔值和数字4种类型,通过运算符可以计算出结果并加以返回。常用的运算符如下:
运算符 | 说明 | 示例 | 返回值 |
---|---|---|---|
| | 计算两个节点集 | //teacher | //student | 返回所有带有teacher和student元素的节点集 |
+ | 加法 | 1+2 | 3 |
- | 减法 | 2-1 | 1 |
* | 乘法 | 1*2 | 2 |
div | 除法 | 2 div 1 | 2 |
= | 等于 | age=5 | 若age是5,则返回true,否则返回false |
!= | 不等于 | age!=5 | 若age不是5,则返回true,否则返回false |
< | 小于 | age<5 | 若age小于5,则返回true,否则返回false |
<= | 小于或等于 | age<=5 | 若age小于或等于5,则返回true,否则返回false |
> | 大于 | age>5 | 若age大于5,则返回true,否则返回false |
>= | 大于或等于 | age>=5 | 若age大于或等于5,则返回true,否则返回false |
or | 或 | age=5 or age =6 | 若age等于5或6中任意一个时,返回true,否则返回false |
and | 与 | age>5 and age <8 | 若age大于5且小于8时,返回true,否则返回false |
mod | 取余数 | 7 mod 2 | 1 |
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6