XML学习总结-XPATH技术-(二)

来源:互联网 发布:nginx 1.10.2 编辑:程序博客网 时间:2024/03/28 23:13
XPATH技术

当使用dom4j查询比较深的层次结构的节点(标签,文本,属性)时,比较麻烦,所以出现了xpath技术

XPATH作用:用于快速获取所需节点对象

在dom4j中如何使用xPath技术

  1)导入xPath支持jar包 。  jaxen-1.1-beta-6.jar

  2)使用xpath方法

    List <Node>  selectNodes("xpath表达式");   查询多个节点对象

    Node       selectSingleNode("xpath表达式");  查询一个节点对象

xPath语法

      /      绝对路径      表示从xml的根位置开始或子元素(一个层次结构)

      //     相对路径       表示不分任何层次结构的选择元素。

      *      通配符         表示匹配所有元素

      []      条件           表示选择什么条件下的元素

      @     属性            表示选择属性节点

      and     关系          表示条件的与关系(等价于&&)

      text()    文本           表示选择文本内容

 

删除指定的标签

package gz.itcast.b_xpath;import java.io.File;import java.io.FileOutputStream;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;/** * 第一个xpath程序 * @author APPle * */public class Demo1 {public static void main(String[] args) throws Exception{/** * 需求: 删除id值为2的学生标签 */Document doc = new SAXReader().read(new File("e:/student.xml"));//1.查询id为2的学生标签//使用xpath技术Element stuElem = (Element)doc.selectSingleNode("//Student[@id='2']");//2.删除标签stuElem.detach();//3.写出xml文件FileOutputStream out = new FileOutputStream("e:/student.xml");OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");XMLWriter writer = new XMLWriter(out,format);writer.write(doc);writer.close();}}

 

package gz.itcast.b_xpath;import java.io.File;import java.util.List;import org.dom4j.Document;import org.dom4j.Node;import org.dom4j.io.SAXReader;/** * 学习xPath表达式语法 * @author APPle * */public class Demo2 {public static void main(String[] args) throws Exception {Document doc = new SAXReader().read(new File("./src/contact.xml"));String xpath = "";/** * 1.  /      绝对路径      表示从xml的根位置开始或子元素(一个层次结构) */xpath = "/contactList";xpath = "/contactList/contact";/** * 2. //     相对路径       表示不分任何层次结构的选择元素。 */xpath = "//contact/name";xpath = "//name";/** * 3. *      通配符         表示匹配所有元素 */xpath = "/contactList/*"; //根标签contactList下的所有子标签xpath = "/contactList//*";//根标签contactList下的所有标签(不分层次结构)/** * 4. []      条件           表示选择什么条件下的元素 *///带有id属性的contact标签xpath = "//contact[@id]";//第二个的contact标签xpath = "//contact[2]";//选择最后一个contact标签xpath = "//contact[last()]";/** * 5. @     属性            表示选择属性节点 */xpath = "//@id"; //选择id属性节点对象,返回的是Attribute对象xpath = "//contact[not(@id)]";//选择不包含id属性的contact标签节点xpath = "//contact[@id='002']";//选择id属性值为002的contact标签xpath = "//contact[@id='001' and @name='eric']";//选择id属性值为001,且name属性为eric的contact标签/** *6.  text()   表示选择文本内容 *///选择name标签下的文本内容,返回Text对象xpath = "//name/text()";xpath = "//contact/name[text()='张三']";//选择姓名为张三的name标签List<Node> list = doc.selectNodes(xpath);for (Node node : list) {System.out.println(node);}}}

  

读取xml文件模拟用户登录

package gz.itcast.b_xpath;import java.io.BufferedReader;import java.io.File;import java.io.InputStreamReader;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;/** * xpath案例: 模拟用户登录效果 * @author APPle * */public class Demo3 {public static void main(String[] args)throws Exception{//1.获取用户输入的用户名和密码BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入用户名:");String name = br.readLine();System.out.println("请输入密码:");String password = br.readLine();//2.到“数据库”中查询是否有对应的用户//对应的用户:  在user.xml文件中找到一个   //name属性值为‘用户输入’,且password属性值为‘用户输入’的user标签Document doc = new SAXReader().read(new File("./src/user.xml"));Element userElem = (Element)doc.selectSingleNode("//user[@name='" +name +"' and @password='"+password+"']");if(userElem!=null){//登录成功System.out.println("登录成功");}else{//登录失败System.out.println("登录失败");}}}

读取HTML文档内容

<html><head><title>通讯录</title><meta http-equiv="content-type" content="text/html; charset=UTF-8" /></head><body><center><h1>通讯录</h1></center><table border="1" align="center" id="contactForm"><thead><tr><th>编号</th><th>姓名</th><th>性别</th><th>年龄</th><th>地址</th><th>电话</th></tr></thead><tbody><tr><td>001</td><td>张三</td><td>男</td><td>18</td><td>广州市天河区</td><td>134000000000</td></tr><tr><td>002</td><td>李四</td><td>女</td><td>20</td><td>广州市越秀区</td><td>13888888888</td></tr><tr><td>002</td><td>郭靖</td><td>男</td><td>30</td><td>广州市番禺区</td><td>1342214321</td></tr></tbody></table></body></html>

 

package gz.itcast.b_xpath;import java.io.File;import java.util.Iterator;import java.util.List;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;/** * 使用xpath技术读取一个规范的html文档 * @author APPle * */public class Demo4 {public static void main(String[] args) throws Exception{Document doc = new SAXReader().read(new File("./src/personList.html"));//System.out.println(doc);//读取title标签Element titleElem = (Element)doc.selectSingleNode("//title");String title = titleElem.getText();System.out.println(title);/** * 练习:读取联系人的所有信息 * 按照以下格式输出: *  编号:001 姓名:张三 性别:男 年龄:18 地址:xxxx 电话: xxxx *       编号:002 姓名:李四 性别:女 年龄:20 地址:xxxx 电话: xxxx *       ...... *///1.读取出所有tbody中的tr标签List<Element> list = (List<Element>)doc.selectNodes("//tbody/tr");//2.遍历for (Element elem : list) {//编号//String id = ((Element)elem.elements().get(0)).getText();String id = elem.selectSingleNode("td[1]").getText();//姓名String name = ((Element)elem.elements().get(1)).getText();//性别String gender = ((Element)elem.elements().get(2)).getText();//年龄String age = ((Element)elem.elements().get(3)).getText();//地址String address = ((Element)elem.elements().get(4)).getText();//电话String phone = ((Element)elem.elements().get(5)).getText();System.out.println("编号:"+id+"\t姓名:"+name+"\t性别:"+gender+"\t年龄:"+age+"\t地址:"+address+"\t电话:"+phone);}}}

 

0 0
原创粉丝点击