XML语言学习5--DOM4J解析+xpath

Dom4j是一个简单、灵活的 开放源代码的库。Dom4j是由早期开发 JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。 
Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。

使用Dom4j开发,需下载dom4j相应的jar文件。

开放源代码使用技巧:docs->index.html->quick start

<span style="white-space:pre">	</span>SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/book1.xml"));
        Element root = document.getRootElement();



查询标签:

    @Test
    public void read() throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/book1.xml"));
        Element root = document.getRootElement();
        List list = root.elements("书");
        Element book = (Element)list.get(1);
        Element book_name = book.element("书名");
        System.out.println(book_name.getText());
    }


查询属性:

//    <书 name="yyyyyyy">
    @Test
    public void readAttribute() throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/book1.xml"));
        Element root = document.getRootElement();
        String value = root.element("书").attributeValue("name");
        System.out.println(value);
    }


增加节点:

//    增加售价节点
    @Test
    public void add() throws DocumentException, IOException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/book1.xml"));

        Element price = DocumentHelper.createElement("售价");
        price.setText("19元");

        document.getRootElement().element("书").add(price);

        OutputFormat format = OutputFormat.createPrettyPrint();

        XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml"),format);
        writer.write(document);
        writer.close();
    }


修改:

//    修改: <售价>109</售价>
    @Test
    public void update() throws IOException, DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/book1.xml"));

        Element price = (Element) document.getRootElement().element("书").elements("售价").get(1);
        price.setText("209");

        OutputFormat format = OutputFormat.createPrettyPrint();

        XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml"),format);
        writer.write(document);
        writer.close();
    }

删除:

//   删除节点<售价>109</售价>
    @Test
    public void delete() throws DocumentException, IOException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/book1.xml"));

        Element price = (Element) document.getRootElement().element("书").elements("售价").get(0);
        price.getParent().remove(price);

        OutputFormat format = OutputFormat.createPrettyPrint();

        XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml"),format);
        writer.write(document);
        writer.close();
    }


指定节点的插入:

 //    向指定位置增加售价节点
    @Test
    public void add2() throws DocumentException, IOException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/book1.xml"));

        Element price = DocumentHelper.createElement("售价");
        price.setText("19元");

        List list = document.getRootElement().element("书").elements();
        list.add(1,price);

        OutputFormat format = OutputFormat.createPrettyPrint();

        XMLWriter writer = new XMLWriter(new FileOutputStream("src/book1.xml"),format);
        writer.write(document);
        writer.close();
    }


xPath的使用:

查找某一节点:

    @Test
    public void findWithXpath() throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/book1.xml"));

        Element name = (Element) document.selectNodes("//书名").get(1);
        System.out.println(name.getText());
    }



实例:

 @Test
    public void findUsers() throws DocumentException, IOException {

       /* BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("请输入用户名:");
        String username = br.readLine();
        System.out.print("请输入密码:");
        String password = br.readLine();*/
        String username = "aaa";
        String password = "123";
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/users.xml"));

        Element e = (Element) document.selectSingleNode("//user[@username='" + username + "' and @password='" + password + "']");
        if (e != null){
            System.out.println("登陆成功!");
        }else{
            System.out.println("用户不存在或密码错误!");
        }










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值