1. import java.io.File;
  2. import java.io.FileOutputStream;
  3.  
  4. import org.dom4j.Document;
  5. import org.dom4j.Element;
  6. import org.dom4j.io.OutputFormat;
  7. import org.dom4j.io.SAXReader;
  8. import org.dom4j.io.XMLWriter;
  9.  
  10. /**
  11. * 第一个xpath程序
  12. * @author APPle
  13. *
  14. */
  15. public class Demo1 {
  16.  
  17. public static void main(String[] args) throws Exception{
  18. /**
  19. * 需求: 删除id值为2的学生标签
  20. */
  21. Document doc = new SAXReader().read(new File("e:/student.xml"));
  22.  
  23. //1.查询id为2的学生标签
  24. //使用xpath技术
  25. Element stuElem = (Element)doc.selectSingleNode("//Student[@id='2']");
  26.  
  27. //2.删除标签
  28. stuElem.detach();
  29.  
  30. //3.写出xml文件
  31. FileOutputStream out = new FileOutputStream("e:/student.xml");
  32. OutputFormat format = OutputFormat.createPrettyPrint();
  33. format.setEncoding("utf-8");
  34. XMLWriter writer = new XMLWriter(out,format);
  35. writer.write(doc);
  36. writer.close();
  37. }
  38.  
  39. }
  1. import java.io.File;
  2. import java.util.List;
  3.  
  4. import org.dom4j.Document;
  5. import org.dom4j.Node;
  6. import org.dom4j.io.SAXReader;
  7.  
  8. /**
  9. * 学习xPath表达式语法
  10. * @author APPle
  11. *
  12. */
  13. public class Demo2 {
  14.  
  15. public static void main(String[] args) throws Exception {
  16. Document doc = new SAXReader().read(new File("./src/contact.xml"));
  17.  
  18. String xpath = "";
  19.  
  20. /**
  21. * 1. / 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
  22. */
  23. xpath = "/contactList";
  24. xpath = "/contactList/contact";
  25.  
  26. /**
  27. * 2. // 相对路径 表示不分任何层次结构的选择元素。
  28. */
  29. xpath = "//contact/name";
  30. xpath = "//name";
  31.  
  32. /**
  33. * 3. * 通配符 表示匹配所有元素
  34. */
  35. xpath = "/contactList/*"; //根标签contactList下的所有子标签
  36. xpath = "/contactList//*";//根标签contactList下的所有标签(不分层次结构)
  37.  
  38. /**
  39. * 4. [] 条件 表示选择什么条件下的元素
  40. */
  41. //带有id属性的contact标签
  42. xpath = "//contact[@id]";
  43. //第二个的contact标签
  44. xpath = "//contact[2]";
  45. //选择最后一个contact标签
  46. xpath = "//contact[last()]";
  47.  
  48. /**
  49. * 5. @ 属性 表示选择属性节点
  50. */
  51. xpath = "//@id"; //选择id属性节点对象,返回的是Attribute对象
  52. xpath = "//contact[not(@id)]";//选择不包含id属性的contact标签节点
  53. xpath = "//contact[@id='002']";//选择id属性值为002的contact标签
  54. xpath = "//contact[@id='001' and @name='eric']";//选择id属性值为001,且name属性为eric的contact标签
  55.  
  56. /**
  57. *6. text() 表示选择文本内容
  58. */
  59. //选择name标签下的文本内容,返回Text对象
  60. xpath = "//name/text()";
  61. xpath = "//contact/name[text()='张三']";//选择姓名为张三的name标签
  62.  
  63. List<Node> list = doc.selectNodes(xpath);
  64. for (Node node : list) {
  65. System.out.println(node);
  66. }
  67. }
  68.  
  69. }
  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.InputStreamReader;
  4.  
  5. import org.dom4j.Document;
  6. import org.dom4j.Element;
  7. import org.dom4j.io.SAXReader;
  8.  
  9. /**
  10. * xpath案例: 模拟用户登录效果
  11. * @author APPle
  12. *
  13. */
  14. public class Demo3 {
  15.  
  16. public static void main(String[] args)throws Exception{
  17. //1.获取用户输入的用户名和密码
  18. BufferedReader br =
  19. new BufferedReader(new InputStreamReader(System.in));
  20.  
  21. System.out.println("请输入用户名:");
  22. String name = br.readLine();
  23.  
  24. System.out.println("请输入密码:");
  25. String password = br.readLine();
  26.  
  27. //2.到“数据库”中查询是否有对应的用户
  28. //对应的用户: 在user.xml文件中找到一个
  29. //name属性值为‘用户输入’,且password属性值为‘用户输入’的user标签
  30. Document doc = new SAXReader().read(new File("./src/user.xml"));
  31. Element userElem = (Element)doc.selectSingleNode("//user[@name='" +name +"' and @password='"+password+"']");
  32.  
  33. if(userElem!=null){
  34. //登录成功
  35. System.out.println("登录成功");
  36. }else{
  37. //登录失败
  38. System.out.println("登录失败");
  39. }
  40. }
  41.  
  42. }
  1. import java.io.File;
  2. import java.util.Iterator;
  3. import java.util.List;
  4.  
  5. import org.dom4j.Document;
  6. import org.dom4j.Element;
  7. import org.dom4j.io.SAXReader;
  8.  
  9. /**
  10. * 使用xpath技术读取一个规范的html文档
  11. * @author APPle
  12. *
  13. */
  14. public class Demo4 {
  15.  
  16. public static void main(String[] args) throws Exception{
  17. Document doc = new SAXReader().read(new File("./src/personList.html"));
  18. //System.out.println(doc);
  19.  
  20. //读取title标签
  21. Element titleElem = (Element)doc.selectSingleNode("//title");
  22. String title = titleElem.getText();
  23. System.out.println(title);
  24.  
  25. /**
  26. * 练习:读取联系人的所有信息
  27. * 按照以下格式输出:
  28. * 编号:001 姓名:张三 性别:男 年龄:18 地址:xxxx 电话: xxxx
  29. * 编号:002 姓名:李四 性别:女 年龄:20 地址:xxxx 电话: xxxx
  30. * ......
  31. */
  32. //1.读取出所有tbody中的tr标签
  33. List<Element> list = (List<Element>)doc.selectNodes("//tbody/tr");
  34. //2.遍历
  35. for (Element elem : list) {
  36. //编号
  37. //String id = ((Element)elem.elements().get(0)).getText();
  38. String id = elem.selectSingleNode("td[1]").getText();
  39. //姓名
  40. String name = ((Element)elem.elements().get(1)).getText();
  41. //性别
  42. String gender = ((Element)elem.elements().get(2)).getText();
  43. //年龄
  44. String age = ((Element)elem.elements().get(3)).getText();
  45. //地址
  46. String address = ((Element)elem.elements().get(4)).getText();
  47. //电话
  48. String phone = ((Element)elem.elements().get(5)).getText();
  49.  
  50. System.out.println("编号:"+id+"\t姓名:"+name+"\t性别:"+
  51. gender+"\t年龄:"+
  52. age+"\t地址:"+address+
  53. "\t电话:"+phone);
  54. }
  55. }
  56. }

xpath应用的更多相关文章

  1. xpath提取多个标签下的text

    title: xpath提取多个标签下的text author: 青南 date: 2015-01-17 16:01:07 categories: [Python] tags: [xpath,Pyth ...

  2. C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

    第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...

  3. 在Java中使用xpath对xml解析

    xpath是一门在xml文档中查找信息的语言.xpath用于在XML文档中通过元素和属性进行导航.它的返回值可能是节点,节点集合,文本,以及节点和文本的混合等.在学习本文档之前应该对XML的节点,元素 ...

  4. XPath 学习二: 语法

    XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) 来选取的. 下面列出了最有用的路径表达式: 表达式 描述 nodename 选 ...

  5. xpath 学习一: 节点

    xpath 中,有七种类型的节点: 元素.属性.文本.命名空间.处理指令.注释.以及根节点 树的根成为文档节点或者根节点. 节点关系: Parent, Children, sibling(同胞), A ...

  6. Python爬虫利器三之Xpath语法与lxml库的用法

    前面我们介绍了 BeautifulSoup 的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法.如果大家对 Beau ...

  7. 使用python+xpath 获取https://pypi.python.org/pypi/lxml/2.3/的下载链接

    使用python+xpath 获取https://pypi.python.org/pypi/lxml/2.3/的下载链接: 使用requests获取html后,分析html中的标签发现所需要的链接在& ...

  8. 关于robotframework,app,appium的xpath定位问题及常用方法

    关于类似的帖子好像很多,但是没有找到具体能帮我解决问题的办法.还是自己深究了好久才基本知道app上面的xpath定位和web上的不同点: 先放一个图: A,先说说不用xpath的场景,一般是用于存在i ...

  9. Selenium Xpath Tutorials - Identifying xpath for element with examples to use in selenium

    Xpath in selenium is close to must required. XPath is element locator and you need to provide xpath ...

  10. xpath定位中starts-with、contains和text()的用法

    starts-with 顾名思义,匹配一个属性开始位置的关键字 contains 匹配一个属性值中包含的字符串 text() 匹配的是显示文本信息,此处也可以用来做定位用 eg //input[sta ...

随机推荐

  1. 【转】 Ubuntu samba服务器搭建及测试--不错

    原文网址:http://blog.csdn.net/longfeey/article/details/5937968 Ubuntu samba服务配置是很不错的文件应用很有学习价值, 这里我主要讲解U ...

  2. 【中国剩余定理】POJ 1006 & HDU 1370 Biorhythms

    题目链接: http://poj.org/problem?id=1006 http://acm.hdu.edu.cn/showproblem.php?pid=1370 题目大意: (X+d)%23=a ...

  3. Sublime一些设置

    很喜欢sublime text 2 总是在新窗口中打开文件,很麻烦,文件打多了,就会出现N多窗口,虽然可以直接打开当前目录可以解决,但有时候查看其它项目中的单个文件,就比较麻烦.百度一直在搜索,无果. ...

  4. 【用PS3手柄在安卓设备上玩游戏系列】谈安卓游戏对手柄的支持

    不同的游戏对于手柄的支持程度是不一样的,对应所需要进行的手柄设置也不尽相同.我没有这样的时间和精力,针对每一款游戏去写博客,但找出不同游戏中的共同点,针对同一类的游戏去写博客,应该是可行的.我把安卓上 ...

  5. [Design Pattern] Command Pattern 简单案例

    Command Pattern, 即命令模式,把一个命令包裹在一个对象里面,将命令对象传递给命令的执行方,属于行为类的设计模式 下面是命令模式的一个简单案例. Stock 代表被操作的对象.Order ...

  6. F - Power Network - poj 1459(简单最大流)

    题目大意:题目说了一大堆,其实都是废话......让人有些不知所云,其实就是给了一些电厂,和一些消费点,然后里面有一些路线什么的,求出消费点可以最多消费的电量是多少. 输入大意: 分析:懂了题意就是一 ...

  7. mongodb的write concern

    mongodb有一个write concern的设置,作用是保障write operation的可靠性.一般是在client driver里设置的,和db.getLastError()方法关系很大 一 ...

  8. 日积月累:ProguardGui进行jar包代码混淆

    前面文章<Proguard进行源代码混淆>讲解过怎么使用Proguard工具对Android的源代码进行混淆的方法(感兴趣的朋友可以访问:http://blog.csdn.net/p106 ...

  9. win7 无线网络无法启动

    开始菜单-运行输入services.msc然后确定!找到WLAN Autoconfig这一项,启动此项服务,一切就OK了

  10. Event Delivery: The Responder Chain(事件传递,响应链)

    当我们设计app的时候,我们很可能想动态的响应事件.例如,触摸一个拥有许多不同对象的屏幕,你要决定给哪个对象一个响应事件,怎么样对象接收到事件. 当一个用户产生事件发生时(如 点击),UIKit产生一 ...