码迷,mamicode.com
首页 > 其他好文 > 详细

xml解析

时间:2015-07-17 01:58:00      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

xml四种解析方式:

DOM

SAX

DOM4J

JDOM

DOM和SAX是java提供的,不需要额外jar包

DOM4J和JDOM需要额外jar包

 

1、DOM

  dom中父节点和字节点之间的空格属于TEXT_NODE,所以getChildNodes得到的NodeList中包含很多节点名为#text的节点,去除此类节点可以通过NodeType过滤。

  节点的值是一个Text的字节点,所以获取节点值需要通过node.getFirstChild().getNodeValue()方法获取节点值;另一种方式是node.getTextContext(),但是这种方式会把字节点的值也获取到

技术分享

解析book.xml

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book id="1">
        <name>冰与火之歌</name>
        <author>乔治马丁</author>
        <year>2014</year>
        <price>89</price>
    </book>
    <book id="2">
        <name>安徒生童话</name>
        <year>2004</year>
        <price>77</price>
        <language>English</language>
    </book>
</bookstore>

解析代码DomTest.java:

package com.immoc.xml;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DomTest {
    public static void main(String[] args) {
        // 创建一个DocumentBuilderFactory对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            // 创建一个DocumentBuilder对象
            DocumentBuilder db = dbf.newDocumentBuilder();
            try {
                // 通过DocumentBuilder的parse方法加载book.xml文件到当前项目下
                Document document = db.parse("/Users/linjian/Documents/workspace/ImmocXml/books.xml");
                // 获取book节点的集合
                NodeList booklist = document.getElementsByTagName("book");
                // 遍历每一个book节点,通过NodeList的getLength()方法获取booklist长度
                for (int i = 0; i < booklist.getLength(); i++) {
                    // 通过item(i)方法获取一个book节点,nodelist的索引值从0开始
                    System.out.println(booklist.item(i).getNodeName());
                    Node book = booklist.item(i);
                    // 获取book节点的所有属性
                    /*
                    NamedNodeMap attrs = book.getAttributes();
                    for (int j = 0; j < attrs.getLength(); j++) {
                        System.out.println("\t" + attrs.item(j).getNodeName() + ":" + attrs.item(j).getNodeValue());
                    }
                    */
                    //获取指定属性
                    Element element = (Element) booklist.item(i);
                    System.out.println("\tid:"+ element.getAttribute("id"));
                    NodeList childnNodeList = book.getChildNodes();
                    for (int k = 0; k < childnNodeList.getLength(); k++) {
                        Node childNode = childnNodeList.item(k);
                        if (childNode.getNodeType() == Node.ELEMENT_NODE) {
//                            System.out.println("\t" + childNode.getNodeName() + ":" + childNode.getTextContent());
                            System.out.println("\t" + childNode.getNodeName() + ":" + childNode.getFirstChild().getNodeValue());
                        }
                    }
                    System.out.println();
                    
                }
            } catch (SAXException | IOException e) {
                e.printStackTrace();
            }
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }
    }
}

 

xml解析

标签:

原文地址:http://www.cnblogs.com/linjian/p/4653137.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!