加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

【JavaWeb-3】XML的解析与XPath的使用

发布时间:2020-12-16 02:15:58 所属栏目:百科 来源:网络整理
导读:1、XML有两种约束方式,一种是dtd(内部dtd和外部dtd,一般外部dtd用的较多),文件后缀是.dtd。另一种是schema,schema的约束更为详细,可以详细到规定只能允许哪些元素、哪些值,文件后缀是.xsd。 2、解析XML的核心思想有SAX和DOM,工具包有很多个,比较流

1、XML有两种约束方式,一种是dtd(内部dtd和外部dtd,一般外部dtd用的较多),文件后缀是.dtd。另一种是schema,schema的约束更为详细,可以详细到规定只能允许哪些元素、哪些值,文件后缀是.xsd。

2、解析XML的核心思想有SAX和DOM,工具包有很多个,比较流行的是dom4j,可以查看官方文档的quick start了解使用方法。实际开发中很少用到,在此只是了解解析原理和过程。

3、新建一个web project。复制一个dom4j-1.6.1.jar包到lib文件夹中(不需要我们自己创建lib目录),复制过来后,系统自动帮我们生成奶瓶,不需要我们自己Build Path。

4、拷贝一个待解析的students.xml文件到src下面。

package com.hello.TestDom4j;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

public class TestDom4j {
    @Test
    public void test1() throws DocumentException{
        // 获得document对象
        SAXReader reader=new SAXReader();
        Document document=reader.read("src/students.xml");
        // 获得里面的元素或者值
        Element root=document.getRootElement();
        List list=root.elements();
        Element secondElement=(Element) list.get(1);
        String name=secondElement.element("name").getText();
        System.out.println(name);
    }
}
@Test
public void test2() throws DocumentException{
    SAXReader reader=new SAXReader();
    Document document=reader.read("src/students.xml");
    Element root=document.getRootElement();
    treeWalk(root);
}
public void treeWalk(Element ele){
    System.out.println(ele.getName());
    for (int i = 0; i < ele.nodeCount(); i++) {
        Node node=ele.node(i);
        if(node instanceof Element){
            treeWalk((Element)node);
        }
    }
}

输出结果是:

students
student
name
age
student
name
age

5、XPath的应用主要在于选择节点元素上,其余的和dom4j一样。
注意:别忘了导入jaxen的jar包。

@Test
    public void test3() throws DocumentException{
        SAXReader reader=new SAXReader();
        Document document=reader.read("src/students.xml");
        Node node=document.selectSingleNode("/students/student[2]/name");
        System.out.println(node.getName()+"t"+node.getText());
    }

    @Test
    public void test4() throws DocumentException{
        SAXReader reader=new SAXReader();
        Document document=reader.read("src/students.xml");
        List list=document.selectNodes("//student/name");
        for (int i = 0; i < list.size(); i++) {
            Node node=(Node) list.get(i);
            System.out.println(node.getName()+"t"+node.getText());
        }
    }

注意:xpath的用法之前在scrapy中学过也实践过,用法都一样,只不过前者是针对xml后者主要是针对html。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读