xml_XPATH详解.ppt_第1页
xml_XPATH详解.ppt_第2页
xml_XPATH详解.ppt_第3页
xml_XPATH详解.ppt_第4页
xml_XPATH详解.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章 XPATH 课程目标 什么是XPATHXPATH的基本语法XPathAPI类的介绍XPathAPI接口的介绍 体验项目 在XSL中引入XPath来查询关于学生信息的文档中的如下内容 运行效果图 使用 操作符显示所有的姓名和年龄 使用通配符 显示所有的字符数据 使用通配符 显示所有的姓名 显示学生的数量 判断电话或手机号码是否包含 8 学生是否姓 李 显示所有的编号属性 显示处理指令和注释 学生的电话或手机的位数 XPath简介 XPath是W3C定义的语言和正式的W3C推荐的语言 W3C拥有XMLPathLanguage XPath Version1 0规范 XPath诞生于1999年 作为对XSLT和XPointer语言的补充 但近来已成为流行的独立语言 因为单个XPath表达式可用于替代多行DOMAPI代码 使用XPath的目的 为了在匹配XML文档结构时能够准确地找到某一个节点元素 可以把XPath比作文件管理路径 通过文件管理路径 可以按照一定的规则查找到所需要的文件 同样 依据XPath所制定的规则 也可以很方便地找到XML结构文档树中的任何一个节点 显然这对XSLT来说是一个最最基本的功能 XPath的基本语法 XPath中对元素和属性的匹配 主要有以下几种 选择分支 定位节点 选择未知元素 选择属性 XPath语法主要是关于一下几方面 XPath表达式 XPath中对元素和属性的匹配 XPath定位路径 XPath函数库 定位节点 每个XML文档都可看成是一棵树 该树与计算机中的树形文件夹非常类似 XPath使用以斜线分隔的子元素名的列表来描述某个XML文档的路径所匹配的元素 class student 表示选择 class 元素下所有的 student 元素 class student name 表示选择 class 元素下所有的 student 元素 选择未知元素 class student 用于选择 class 元素下所有的 student 元素的所有子元素 class name 用于选择 class 元素下所有的子元素下的所有 name 元素 name 用于选择具有两个祖先的所有 name 元素 用于选择该文档中的所有元素 在实际应用中我们经常会使用通配符 来选择未知的XML元素 如下 选择分支 通过在XPath语句中使用中括号 可以进一步指定某个元素 在中括号中可以使用各种函数 数值 表达式等来指定某个符合条件的元素 如下 class student 1 选择 class 元素下的第一个 student 子元素 class student age 选择 class 元素下含有 age 元素的所有 student 元素 class student age 20 选择 class 元素下 student 元素中的 age 元素值为20的所有 student 元素 class student age 20 name 选择 class 元素下的 age 元素值为20的所有 student 元素下的所有 name 元素 class student last 选择 class 元素下的最后一个 student 子元素 选择多个路径 通过在XPath语句中使用 操作符来选择多个路径 如下 class student name class teacher name 表示选择 class 元素下 student 元素中的所有 name 元素和 class 元素下 teacher 元素中的所有 name 元素 name age email 选择文档中所有的 name 元素 age 元素和 email 元素 name class student age 选择文档中所有的 name 元素和 class 元素下 student 元素中的所有 age 元素 选择属性 在XPath语法中 要获得属性信息必须以前缀 来指定 如下 id 表示选择所有属性名为 id 的属性 class student id 表示选择 class 元素下包含有 id 属性的所有 student 元素 class student 表示选择 class 元素下包含有属性的所有 student 元素 class student id ADR02 表示选择 class 元素下包含有 id 属性的值为 ADR02 的所有 student 元素 匹配元素和属性的示例 该文档中的所有元素的字符数据 最后一个学生的姓名 所有的姓名 年龄为23的学生的姓名 学生的姓名和年龄 所有的id属性 XPath定位路径 一个XPath定位路径表达式将返回一个符合条件的节点集 定位路径可以是相对路径 也可以是绝对路径 绝对定位路径以一个斜线 开头 而相对定位路径则没有 定位路径是由一个或多个定位步骤组成 每个步骤用一个斜线分隔 定位绝对路径的表达式如下所示 class student name定位相对路径的表达式如下所示 class student name 定位步骤 定位步骤按照顺序从左到右依次求值 每一个定位步骤都是相对于上下文节点集中的节点进行求值的 一个定位路径由若干个定位步骤组成 一个定位步骤一般有三部分 一个轴 它指定了定位步骤选择的节点与上下文节点之间的关系 一个节点测试 它指定定位步骤选择的节点的节点类型以及节点扩展名 零个或零个以上的判定语句 它使用专有的表达式进一步细化定位步骤选择的节点集合 定位步骤的语法 定位步骤的语法是由两个冒号分开的轴名和节点测试组成 其后可跟随零个或零个以上在方括符内的表达式 child age age 20 轴名 一般格式如下 判定语句 节点测试 轴 用到的轴主要有以下几种 child 当前节点所有的子节点 例如 child 表示选择当前节点的所有子元素child text 表示选择当前节点的文本节点 child node 表示选择当前节点的所有子节点 descendant 该轴包含该节点的后裔 后裔是一个孩子或一个孩子的孩子 等等 后裔轴从来不包含属性或命名空间节点 例如 descendant name表示选择当前节点的后代中所有name元素 parent 当前节点的所有父节点 ancestor 该轴包含该节点的所有祖先节点 该节点的祖先由该节点的父节点以及父节点的父节点等组成 这样 祖先轴将总是包括根节点 除非该节点是根节点 例如 ancestor age表示选择当前节点的祖先节点中所有的age元素 following sibling 包含该节点的所有在其后的兄弟 如果该节点是属性节点或命名空间节点 following sibling则为空 preceding sibling 包含该节点的所有在其前的兄弟 如果该节点是属性节点或命名空间节点 则preceding sibling轴为空 following 包含在该节点所在的同一文档中 所有依照文档顺序在该节点后的节点 但排除所有的后裔 也排除属性节点以及命名空间节点 preceding 包含在该节点所在的同一文档中 所有依照文档顺序在该节点前的节点 但排除所有的后裔 也排除属性节点以及命名空间节点 attribute 包含该节点的属性 除非该节点是元素 该轴将为空 例如 attribute 表示选择当前节点的所有属性 namespace 包含该节点的命名空间节点 除非该节点是元素 该轴将为空 self 只包含该节点本身 ancestor or self 包含该节点和该节点的祖先 这样该轴将总是包括根节点 descendant or self 包含该节点和该节点的后裔 节点测试 节点测试是一个条件 并且是路径表达式中定位步骤的第二个组件 在该轴中选定的所有节点都必须满足此条件 有以下两种 以节点名作为节点测试 以节点类型作为节点测试 有如下的路径表达式 child name 以节点名 name 作为节点测试 child text 以节点类型作为节点测试 以节点类型作为节点测试 主要节点类型有 node 任何类型的节点 processing instruction 处理指令节点 text 文本类型节点 comment 表示注释节点 XPath表达式 XPath除了定位路径表达式外 还有许多其它的基本表达式结构 包括布尔 等式 关系和数值表达式 它们通常用于XPath谓词和各种XSLT结构中 关系表达式 数值表达式 数值表达式的运算符主要包括 加 减 乘 除 div 和取模 mod 一般格式如下 操作数1运算符操作数2 关系表达式 关系表达式主要用于对两个值的比较 其中主要的运算符及其用法如表所示 XPath函数库 XPath提供了函数库以方便计算表达式 我们可以使用XPath函数改进XPath的查询 并提高XPath的编程能力和其灵活性 XPath函数库中的函数主要分为 字符串函数 节点集函数 布尔函数 数值函数 注意 使用XPath函数时必须严格区分函数名的大小写和参数信息 节点集函数 XPath的节点集函数主要有以下几种 count 该函数返回被选元素的数目 id 通过元素的唯一ID选择元素 last 返回最后一个节点是第几个节点 local name 返回节点集中第一个节点的localname name 返回元素的元素名 namespace uri 返回节点集中第一个节点的命名空间URI position 返回被选元素是第几个节点 节点集函数示例 将元素名和字符数据用等号连接 person 元素的数量 字符串函数 字符串函数有如下几种 concat 返回字符串连接的结果 contains 如果第一个字符串包含第二个字符串 则返回真 否则返回假 normalize space 返回去除了前后空白以及重复空白的参数字符串 starts with 如果第一个字符串以第二个字符串开头则返回真 否则返回假 string 将对象转换为字符串 string length 返回一个字符串的长度 substring 返回第一个参数中从第二个参数指定的位置开始 第三个参数指定的长度的字符串substring after 返回字符串中从开始到某一字符串第一次出现的位置后的字符串 字符串函数示例 是否包含单词 May 是否以数字 8 开头 单词的长度 数值函数 数值函数主要有以下几种 ceiling 返回不小于参数的最小整数 floor 返回不大于参数的最大整数 number 将参数转换为数字 round 返回与参数最接近的整数值 sum 返回节点集中所有节点的总和 每个节点在求和之前先转换为数值 如 ceiling 4 3 将返回4 round 4 7 将返回5sum class student money 返回学生的钱数的总和 布尔函数 布尔函数主要用于对参数表达式进行计算 并返回结果 有如下几种 boolean 将参数转换为布尔值 如果参数是负数或正数 将转换为布尔值true 如果参数为零或NaN值 将转换为false 如果参数为非空的节点集 将转换为true 空节点集将转换为false 如果参数为非空的字符串 将转换为true 空字符串将转换为false 如果参数不属于四种基本类型的对象 将通过该类型相应的方式转换为布尔值 false 返回false lang 如果该节点的xml lang属性与参数字符串相同 则返回true 此函数不常用 not 如果参数为false 则返回true 否则 返回false true 返回true XPathAPI的使用 XPath表达式比繁琐的文档对象模型 DOM 代码要容易编写得多 如果需要从XML文档中提取信息 最快捷 最简单的办法就是在Java程序中嵌入XPath表达式 在Java版本中推出了javax xml xpath包 这是一个用于XPath文档查询的独立于XML对象模型的库 XPathAPI的常用类及接口如下 XPath接口 XPathFactory类 XPathVariableResolver接口和XPathFunctionResolver接口 XPathExpression接口 XPathVariableResolver接口和XPathFunctionResolver接口主要用于在程序中定义和使用XPath的扩展函数 一般不常使用 XPathFactory类 XPathFactory实例可用于创建XPath对象 该类只有一个受保护的空构造方法 常用的方法主要有以下几种 abstractvoidsetXPathFunctionResolver XPathFunctionResolverresolver 建立默认函数解析器 staticXPathFactorynewInstance 获取使用默认对象模型 DOM 的新XPathFactory实例 abstractvoidsetXPathVariableResolver XPathVariableResolverresolver 建立默认变量解析器 abstractbooleanisObjectModelSupported StringobjectModel 此XPathFactory是否支持指定的对象模型 在实际应用中经常会使用的newInstance 静态方法来获得一个该类的实例 XPath接口 提供了对XPath计算环境和表达式的访问 XPath对象不是线程安全的 也不能重复载入 也就是说应用程序负责确保在任意给定时间内不能有多个线程使用一个XPath对象 常用方法有以下几种 voidreset 将此XPath重置为其初始配置 XPathExpressioncompile Stringexpression 编译XPath表达式 voidsetXPathFunctionResolver XPathFunctionResolverresolver 建立函数解析器 voidsetNamespaceContext NamespaceContextnsContext 建立名称空间上下文 voidsetXPathVariableResolver XPathVariableResolverresolver 建立变量解析器 XPathExpression接口 XPathExpression接口提供了对编译后的XPath表达式的访问 如果表达式包含变量 则其值将通过XPathVariableResolver 方法找到 如果变量解析器未定义或解析器返回null 将会抛出异常 如果表达式包含函数引用 则函数将通过XPathFunctionResolver 方法找到 如果函数解析器未定义或解析器为函数返回null 将会抛出异常 该接口最长用的方法是evaluate 方法 如下 Stringevaluate InputSourcesource 计算指定InputSource编译后的XPath表达式并将结果以字符串形式返回 Stringevaluate Objectitem 计算指定编译后的XPath表达式并以字符串形式返回 Objectevaluate Objectitem QNamereturnType 计算指定的XPath表达式并返回指定类型的结果 Objectevaluate InputSourcesource QNamereturnType 计算指定InputSource编译后的XPath表达式并返回指定类型的结果 XPathAPI的使用示例 importjavax xml parsers importjavax xml xpath importorg w3c dom publicclassTestXpath2 publicstaticvoidmain String args throwsException DocumentBuilderFactorydomFactory DocumentBuilderFactory newInstance DocumentBuilderbuilder domFactory newDocumentBuilder Documentdoc builder parse cdcatalog xml 获取一个XPathFactory实例XPathFactoryfactory XPathFactory newInstance XPathxpath factory newXPath 使用XPath函数XPathExpressionexpr pile sum cd price Stringresult exp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论