解析XML

解析XML

就是从xml获取数据。

常见的解析思想

DOM

DOM(Document Object Model)文档对象模型:就是把文档的各个部分看做对应的对象。会把xml文件全部加载到内存,在内存中形成一个树状结构,再获取对应的值

Element,Attribute和Text有一个共同父类Node对象

常见的解析工具

JAXP:SUN公司提供的一套xml的解析的API
JDOM:开源组织提供的一套XML的解析的API-jdom
DOM4J: 开源组织提供一套xml的解析API-dom4j, 全称Dom For Java
pull: 主要应用在Android手机端解析xml

案例

<?xml version="1.0" encoding="UTF-8" ?>
<!--注释的内容-->
<!--本xml文件永磊描述多个学生的信息-->
<studnet>
<!--    第一个学生的信息-->
    <student id="1">
        <name>张三</name>
        <age>23</age>
    </student>
<!--    第二个学生的信息-->
    <student id="2">
        <name>李四</name>
        <age>24</age>
    </student>
    <aaa></aaa>

</studnet>
public class XmlParse {
    public static void main(String[] args) throws DocumentException {
        // 1. 获取文一个解析器对象
        SAXReader saxReader = new SAXReader();
        // 2. 利用解析器把xml文件加载到内存中,并返回一个文档对象
        Document document = saxReader.read(new File("xml\\student.xml"));
        // 3. 获取到根标签
        Element rootElement = document.getRootElement();
        // 4. 通过根标签获取student标签
        // elements(): 可以获取调用者所有的标签,会把这些子标签放到一个集合中返回
        // elements("标签名"):可以获取调用者所有的指定的子标签,会把这些子标签放到一个集合中返回
        // List list = rootElement.elements();
        List<Element> studentElements = rootElement.elements("student");
        System.out.println(studentElements.size());

        ArrayList<Student> list = new ArrayList<>();

        // 5. 遍历集合,得到每一个student标签
        for (Element element : studentElements) {
            //element依次表示每一个student标签
            // 获取id这个属性
            Attribute attribute = element.attribute("id");
            // 获取id的属性值
            String id = attribute.getValue();

            // 获取name标签
            // element("标签名"): 获取调用者指定的子标签
            Element nameElement = element.element("name");
            // 获取这个标签的标签体内容
            String name = nameElement.getText();

            // 获取age标签
            Element ageElement = element.element("age");
            // 获取age这个标签的标签体内容
            String age = ageElement.getText();

//            System.out.println(id);
//            System.out.println(name);
//            System.out.println(age);
            Student s = new Student(id, name, Integer.parseInt(age));
            list.add(s);
        }

        // 遍历
        for (Student student : list) {
            System.out.println(student);
        }
    }
}