Java 7: XML - DOM4J

解析XML
DOM :(Java提供) (整个文件加载到内存中去执行解析)以指定编码解析
SAX :(Javat提供) 创建一个Handler类逐个节点的访问解析;个人理解因为不是一次性加载到内存,这个不提供修改保存;是事件形驱动;可以指定编码解析
JDOM :通过Stream 流的形式一次性解析加载到内存。和DOM解析类似,即使不知道第一级节点的标签名也能遍历解析; 还可以指定编码解析;
DOM4J :通过Stream 流的形式一次性解析加载到内存。和DOM解析类似,即使不知道第一级节点的标签名也能遍历解析; 还可以指定编码解析;是JDOM的一个分支;

DOM4J解析

DOM4J不是Java 官方提供,需要自己导入依赖;

准备工作

        SAXReader saxReader = new SAXReader();
        org.dom4j.Document document = saxReader.read(new File("books.xml"));
        org.dom4j.Element rootElement = document.getRootElement();
 public static void dom4jParser() throws DocumentException {
        SAXReader saxReader = new SAXReader();
        org.dom4j.Document document = saxReader.read(new File("books.xml"));
        org.dom4j.Element rootElement = document.getRootElement();

        Iterator iterator = rootElement.elementIterator();

        while (iterator.hasNext()) {
            org.dom4j.Element element = iterator.next();

            // 获取属性   element.attributeIterator();  element.attribute(int / String)
            List attributes = element.attributes();
            for (org.dom4j.Attribute attr : attributes) {
                System.out.println(attr.getName() + "  " + attr.getValue());
            }
            System.out.println(element.getName());
        }

        //选择过滤,只保留book标签
        Iterator iterator1 = rootElement.elementIterator("book");

        while (iterator1.hasNext()) {
            org.dom4j.Element element = iterator1.next();
            System.out.println(element.getName());

            Iterator childIterator = element.elementIterator();
            while (childIterator.hasNext()) {
                // 获取子元素 其实也是element
                org.dom4j.Element next = (org.dom4j.Element) childIterator.next();
                System.out.println(next.getName() + "    " + next.getStringValue());
            }

        }
    }

你可能感兴趣的:(Java 7: XML - DOM4J)