Java解析xml获取根节点和子节点

XML 指可扩展标记语言(EXtensible Markup Language)。

XML 是一种很像HTML的标记语言。

XML 的设计宗旨是传输数据,而不是显示数据。

XML 标签没有被预定义。您需要自行定义标签。

XML 被设计为具有自我描述性。

XML 是 W3C 的推荐标准。

 

1.准备xml文件

 

<?xml version="1.0" encoding="UTF-8"?>
<student>
<username>张三</username>
<age>19</age>
<addr>四川成都</addr>
<phone>11000012120</phone>
<!--    <a><b>我是在a节点里面的节点</b></a>-->
</student>

 

名称可以包含字母、数字以及其他的字符,名称不能以数字或者标点符号开始

名称不能以字母 xml(或者XML、Xml等等)开始,名称不能包含空格

2.解析xml

DOM解析原理:

1)JAXB (oracle-Sun公司官方)

2)JDOM工具(非官方)

3)Dom4J工具(非官方)

三大框架(默认读取xml的工具就是Dom4j)

.......

 

SAX解析原理:

1)Sax解析工具(oracle-sun公司官方)

 

 

2.1DoM4j

 

package com.keduo.shangke.xml;

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

import java.io.File;

public class Dom4jDemo {
    /**
     * 获取document对象  三种方式
     */
    @Test
    public void getDom() throws Exception {
        //方式一:不推荐
        Document document1 = DocumentHelper.createDocument();
        Element root1 = document1.addElement("student");
        System.out.println("方式1" + root1.getName());

        //方式二: 经常使用
        //创建SAXReader对象
        SAXReader reader = new SAXReader();
        //读取文件 转换成Document
        Document document2 = reader.read(new File("students.xml"));
        Element root2 = document2.getRootElement();
        System.out.println("方式2" + root2.getName());

        //方式三:  强烈不推荐
        String xmlStr = "<student>\n" +
                "<username>张三</username>\n" +
                "<age>19</age>\n" +
                "<addr>四川成都</addr>\n" +
                "<phone>11000012120</phone>\n" +
                "</student>";
        Document document3 = DocumentHelper.parseText(xmlStr);
        Element root3 = document3.getRootElement();
        System.out.println("方式3" + root3.getName());
    }
    /**
     * 获取xml节点内容
     */
    @Test
    public void getElement() throws Exception{
        //创建SAXReader对象
        SAXReader reader = new SAXReader();
        //读取文件 转换成Document
        Document document = reader.read(new File("students.xml"));
        Element root = document.getRootElement();
        System.out.println("根节点-->"+root.getName());
        //获取子节点
        Element node=root.element("username");//在root节点下面找username节点
        System.out.println("节点名称------>"+node.getName()+",节点值------->"+node.getStringValue());

        //获取子节点中嵌套的子节点
        Element a=root.element("a");//在root节点下面找username节点
        Element b=a.element("b");
        System.out.println("子节点里面嵌套的子节点是------->>>>"+b.getName()+"....."+b.getStringValue());
    }
}
 

 

2.2JAXB通过注解解析

 

JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等。

JAXB(Java Architecture for XML Binding)是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

 

package com.keduo.shangke.xml;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

//类名要与属性对应的节点父节点绑定
@XmlRootElement(name = "student")
public class Student {
    private String username;

    private String age;

    private String addr;

    private String phone;
    //@XmlElemen:将xml中的对应属性绑定起来  写在get和set方法上,不能写在属性上
    @XmlElement(name = "username")
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @XmlElement(name = "age")
    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
    @XmlElement(name = "addr")
    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }
    @XmlElement(name = "phone")
    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "Student{" +
                "username='" + username + '\'' +
                ", age='" + age + '\'' +
                ", addr='" + addr + '\'' +
                ", phone='" + phone + '\'' +
                '}';
    }
}
 
package com.keduo.shangke.xml;

import org.junit.Test;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.File;

public class JaxbTest {
    @Test
    public void test() throws JAXBException {
        //第一步准备xml文件
        //第二步准备xml文件对应的实体类
        //第三步在对应的实体类中添加注解
        //第四步使用jaxb技术,实现
        JAXBContext js=JAXBContext.newInstance(Student.class);
        //创建Unmarshaller对象
        Unmarshaller u=js.createUnmarshaller();
        Student student= (Student) u.unmarshal(new File("students.xml"));
        System.out.println(student);
    }
}

3.sax解析xml

 

 

参考: http://blog.csdn.net/lp284558195/article/details/79136322

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值