在java中应用dom解析xml

    添加时间:2013-5-3 点击量:

    dom是个功能强大的解析对象,实用于小文档


    为什么这么说呢?因为它会把整篇xml文档装载进内存中,形成一颗文档对象树


    总之听起来怪吓人的,不过应用它来读取点小器材相对Sax而言还是挺便利的


    至于它的增删操纵等,我是不筹算写了,在我看教程的时辰我就差点被那代码给丑到吐了


    也正因为如此,才有后来那些jdom和dom4j等对象的存在……


    不久不多说,直接上代码


    Dom解析示例



    import java.io.File;
    

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

    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;


    public class Demo {

    public static void main(String[] args) throws Exception {
    //创建解析器工厂实例,并生成解析器
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    //创建须要解析的文档对象
    File f = new File(books.xml);
    //解析文档,并返回一个Document对象,此时xml文档已加载到内存中
    //好吧,让解析来得更狠恶些吧,其余的事就是获取数据了
    Document doc = builder.parse(f);

    //获取文档根元素
    //你问我为什么这么做?因为文档对象本身就是树形布局,这里就是树根
    //当然,你也可以直接找到元素凑集,省略此步调
    Element root = doc.getDocumentElement();

    //上方找到了根节点,这里开端获取根节点下的元素凑集
    NodeList list = root.getElementsByTagName(book);

    for (int i = 0; i < list.getLength(); i++) {
    //经由过程item()办法找到凑集中的节点,并向下转型为Element对象
    Element n = (Element) list.item(i);
    //获取对象中的属性map,用for轮回提取并打印
    NamedNodeMap node = n.getAttributes();
    for (int x = 0; x < node.getLength(); x++) {
    Node nn = node.item(x);
    System.out.println(nn.getNodeName() + : + nn.getNodeValue());
    }
    //打印元素内容,代码很纠结,差不久不多是个固定格局
    System.out.println(title: +n.getElementsByTagName(title).item(0).getFirstChild().getNodeValue());
    System.out.println(author: + n.getElementsByTagName(author).item(0).getFirstChild().getNodeValue());
    System.out.println();
    }
    }

    }


     输出成果:



    读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
    分享到: