`
smiky
  • 浏览: 254592 次
  • 性别: Icon_minigender_1
  • 来自: 天门
社区版块
存档分类
最新评论

xpath的一点笔记

阅读更多

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <person lang="cn">
        <name>smiky</name>
        <age>20</age>
        <sex>boy</sex>
    </person>
    <person lang="en">
        <name multiple="true">欧阳疯</name>
        <age>24</age>
        <sex>girl</sex>
    </person>
</root>
<!--
*XPath的七种节点类型:
*元素,属性,文本,文档节点(即根节点),命名空间,注释,处理指令
*
*节点关系:
*父、子、兄弟、先辈、后代
*
*Xpath常用符号:
*/ 从根节点开始选
*// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置 (example://name,会选择两个name元素,不考虑name元素出现在那)
*. 当前节点
*..父节点
*| 表示或 (example: //person[1] | person[2] 会选择两个person)
*@ 选取属性 (example: //@multiple 会选取<name multiple="true">欧阳疯</name>中的值true)
*      * 用于匹配任意元素
*      @*用于匹配任意属性
*node()匹配任意节点(//person/age/node())
*text()匹配文本节点(//person/age/text())
//node()与text()相关于一个节点来使用
*last()匹配最后一个节点 (//person[last()-1]匹配倒数第二个person)
*position()匹配某个位置(如//person[position=1]选择第一个person)
//last()与position看样子只能在谓语中使用
*
*
*XPath的12个轴:
*ancestor 父辈(包括父节点及祖父等)
*ancestor-or-self 相对于ancestor多了它自身
*descentdant 后辈(包括子节点及孙节点)
*descentdant-or-selt 相对于descendant多了它自身
*attribute 选择当前节点的属性
*child 选取当前节点的子节点
*parent 选择当前节点的父节点
*self 选择当前节点
*namesapce 选取当前节点的所有命名空间节点
*following 选择当前节点标签结束之后的所有节点(如//person[1]/following::*,不仅会选第二个person,还会选person[2]中的name,age,sex)
*preceding 与following相反,选择当前节点开始之前的所有节点
*preceding-sibling 选择preceding的兄弟节点
*
*轴的使用:
*//person[2]/ancestor-or-self::*[1]
*                 轴         ::轴中对应的节点[谓语(进一步选择)]  
*
*XPath运算符
*|,+,-,div(除),mod,*(乘法),>,>=,<,<=,=,!=,and,or
*运算符好像只能用在谓语里面对节点进行进一步的过滤

//person[age>=20 and age=24] 根据子元素的值选择
//person[@lang="cn"] 根据属性选择

    1. /bookstore/book/@category
    2. /bookstore/book[@category]
这两者之间的区别:1选取的是一个属性节点,2选取的是具有category属性的book,2中属性只是谓语,用于限定选取结果


XSLT常用元素:
<xsl:template match="/"></xsl:template>
<xsl:value-of select=""/>
<xsl:for-each select="" ></xsl:for-each>
<xsl:sort select=""/>
<xsl:if test=""></xls:if>
<xsl:choose>
    <xsl:when test="age>23"></xsl:when>
    <xsl:when test="age>20"></xsl:when>
    <xsl:otherwise></xsl:otherwise>
</xsl:choose>
这里相当于:
if(age>23){

}else if(age>20){

}else{

}

<xsl:apply-templates />


XQuery:
XQuery 使用函数来提取 XML 文档中的数据。
doc() 用于打开 "books.xml" 文件:
doc("books.xml")/bookstore/book[price>30],XQuery 使用谓语来限定从 XML 文档所提取的数据

FLWOR:
for 语句把 bookstore 元素下的所有 book 元素提取到名为 $x 的变量中。(测试过,变量名前要加$,不加报错)
where 语句选取了 price 元素值大于 30 的 book 元素。
order by 语句定义了排序次序。将根据 title 元素进行排序。
return 语句规定返回什么内容。在此返回的是 title 元素。

for, let, where, order by, return
for $book in doc("books.xml")/bookstore/book
where $book/price>30
order by $book/price
return $book/title

for $book in doc("books.xml")/bookstore/book
order by $book/price
return $book/title

<ul>
{
for $x in doc()/bookstore/book/title
order by $x
return <li>{data($x)}</li>//data($x)用于获取$x的值,必须用{}括起来,不然就会原样输出data($x)
}
</ul>
可以看出XQuery用{}来区分代码与非代码部分(如同JSP中的<%%>)
当代码与非代码连接时一定要用{}括起代码部分,否则XQuery将全部当成非代码处理(即当字成符),对于只有代码的话不用括起来

XQuery 的基础语法规则:
一些基本的语法规则:
•XQuery 对大小写敏感
•XQuery 的元素、属性以及变量必须是合法的 XML 名称。
•XQuery 字符串值可使用单引号或双引号。
•XQuery 变量由 “$” 并跟随一个名称来进行定义,举例,$bookstore
•XQuery 注释被 (: 和 :) 分割,举例,(: XQuery 注释 :)

XQuery注意事项:
XQuery返回的要么只有数据,要么是有正常开始结束标签的字符串(<abc>123</abc>,这样<abc>123会报错)
可以出现这种结果:
<abc>123</abc>
    123
<abc>123</123>

并且在只有代码时不能用{}括着代码
如:{doc()/bookstore/book}会报错
-->








分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics