即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

[置顶] 简谈XPath

编程语言 Cecilia620 29℃ 0评论
本文目录
[隐藏]

1.1.XPath是什么?

1.1.XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

2.2.为什么要使用XPath?

2.1.XPath 用于在 XML 文档中通过元素和属性进行导航。如果XML节点过多或者复杂,那么需要使用XPath就比较方便。

3.3.Xpath的基本准则表达式

3.1.基本 XPath 表达式 (判断是谁的集合!!)

3.2.3.1.当前上下文

3.3.以句点和正斜杠 (./) 作为前缀的表达式明确使用当前上下文作为上下文。例如,以下表达式引用当前上下文中的所有 元素:

./author

3.4.注意,此表达式等效于以下表达式:

author

3.5.3.2.文档根

3.6.以正斜杠 (/) 为前缀的表达式使用文档树的根作为上下文。例如,以下表达式引用此文档根的 元素:

/bookstore

3.7.3.3.根元素

3.8.使用正斜杠后接星号 (/*) 的表达式将使用根元素作为上下文。例如,以下表达式查找文档的根元素:

/*

3.9.3.4.递归下降

#### 用双正斜杠 (//) 的表达式指示可以包括零个或多个层次结构级别的搜索。如果此运算符出现在模式的开头,上下文相对于文档的根。例如,以下表达式引用当前文档中任意位置的所有 元素:


#### //author

3.10..// 前缀指示上下文从层次结构中当前上下文所指示的级别开始。

3.11.3.5.特定元素

3.12.以元素名开头的表达式引用特定元素的查询,从当前上下文节点开始。例如,以下表达式引用当前上下文节点中 元素内的

3.13.XPath 表达式是使用下表中所示的运算符和特殊字符构造的。

3.14.运算符和特殊字符:

3.15./ 子运算符;选择左侧集合的直接子级。此路径运算符出现在模式开头时,表示应从根节点选择该子级。

3.16.// 递归下降;在任意深度搜索指定元素。此路径运算符出现在模式开头时,表示应从根节点递归下降。

3.17.. 指示当前上下文。

3.18... 当前上下文节点的父级。

3.19.* 通配符;选择所有元素,与元素名无关。

3.20.@ 属性;属性名的前缀。

3.21.@* 属性通配符;选择所有属性,与名称无关。

3.22.: 命名空间分隔符;将命名空间前缀与元素名或属性名分隔。

3.23.( ) 为运算分组,明确设置优先级。

3.24.[ ] 应用筛选模式。

3.25.[ ] 下标运算符;用于在集合中编制索引。

3.26.+ 执行加法。

3.27.– 执行减法。

3.28.div 根据 IEEE 754 执行浮点除法。

3.29.* 执行乘法。

3.30.mod 从截断除法返回余数。

3.31.通配符

3.32.通过使用通配符 * 集合,不使用元素名即可引用元素。* 集合引用作为当前上下文的子级的所有元素,与名称无关。

//例如:
   author/* 
    //元素的所有元素子级。

   book/*/last-name
   // 所有作为  元素的孙级的  元素。

   */*
   // 当前上下文的所有孙级元素。

   my:book
   my  //命名空间中的  元素。

   my:*
   my  //命名空间中的所有元素。
 //属性
XPath  //使用 @ 符号表示属性名。属性和子元素应公平对待,两种类型之间的功能应尽可能相当。
例如:
   @style
   // 当前元素上下文的 style 属性。

  price/@exchange
    //当前上下文中  元素的 exchange 属性。

   book/@style
     //所有  元素的 style 属性。

    @*
     //当前上下文节点的所有属性。

    @my:*  
    my  //命名空间中的所有属性。不包括 my 命名空间中的元素的未限定属性。

    //注意:
    // 属性不能包含子元素,所以,如果对属性应用路径运算符,将出现语法错误。此外,不能对属性应用索引,因为根据定义,不为属性定义任何顺序。
   price/@exchange/total

3.33.比较

3.34.运算符:(具体可见XPath帮助文档)

3.35.and 逻辑与

3.36.or 逻辑或

3.37.not() 非

3.38.= 相等

3.39.!= 不相等

3.40.< 小于

3.41.<= 小于或等于

3.42.> 大于

3.43.<= 大于或等于

3.44.| 集运算;返回两个节点集的联合

4.4.XPath在dom4j中如何使用

4.1.1)在项目中导入xpath支持jar包。jaxen-1.1-beta-6.jar

4.2.2)使用dom4j提供的xpath方法

4.3.selectNodes(xpath表达式): 查询符合条件的多个节点对象 。

4.4.selectSingleNode(xpath表达式) 查询符合条件的一个节点对象。

5.5.如何使用XPath提取数据?

5.1.实例演示:

5.2.user.xml文件


<users>
    <user id="1" username="Cecilia" password="123" email="582125509@qq.com"/>
    <user id="2" username="aaa" password="456" email="123456789@136.com"/>
    <user id="3" username="bbb" password="789" email="987654321@126.com"/>
users>

6.测试类

/**
 * 使用XPath提取XML数据
 * @author 芷若初荨
 *@Exception Exception
 */
 //需要导包:jaxen-1.1-beta-7
public class XPathExtractXml {
    public static void main(String[] args) throws Exception {
        SAXReader reader=new SAXReader();
        Document document=reader.read(new File("msg/book.xml"));

        String value=document.selectSingleNode("//作者").getText();
        System.out.println(value);
    }
}

7.6.如何使用Xpath匹配用户名和密码的验证?

/**
 * 查找users.xml文件是否和用户匹配的用户名和密码
 * @author 芷若初荨
 *
 */
public class XPathAnalysisXMLTest {
    public static void main(String[] args) throws Exception {
        String username="aaa";
        String password="456";
//      检测XML文档是否有匹配的用户名和密码
        SAXReader reader=new SAXReader();
        Document document=reader.read(new File("msg/user.xml"));
        Node node=document.selectSingleNode("//user[@username="+username+" and @password="+password+"]");
//      //"user[@username+"+username+"and @password"+password+"]"
        if(node==null){
            System.out.println("用户名或密码错误!!");
        }else{
            System.out.println("登陆成功!");
        }
    }
}

转载请注明:CodingBlog » [置顶] 简谈XPath

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情