JAVA使用DOM方式来解析XML文件

了解XML文件

xml表现:以.xml为文件扩展名的文件
xml文件的结构为树形结构
节点名区分大小写
在java程序中读取xml文件的过程称为解析xml文件
解析的目的:获取节点名、节点值、属性名、属性值。
通常使用四种解析方式:DOM、SAX、DOM4J、JDOM

解析xml文件的准备工作

1、创建一个DocumentBuilderFactory对象

DocumentBuilderFactory dbf=DocumentBuilderFactory.newinstance();

2、创建一个DocumentBuilder对象

DocumentBuilder db=dbf.newDoucumentBuilder();

3、通过DocumentBuilder对象的parse(String fileName)方法来解析xml文件

Document d=db.parse("url");//把XML文件加载到当前项目下

在java程序中如何获取xml文件的内容

通过上面的准备工作之后,我们把XML文件就加载到了项目中,然后我们可以通过Document.getElementsByTagName("TagName");方法来获取XML中节点的数据。这个方法会返回一个NodeList类型的值,直译过来就是一个节点集合。所以我们可以用NodeList来接受返回值

NodeList nl=Document.getElementsByTagName("TagName");

获取到了XML中的节点集合之后,可以通过getLength()方法来获取集合中的节点个数。同时可以用item(index);方法来获取集合当中的节点,这个方法会返回一个Node类型的值。

Node n=nl.item(index);

获取到了节点之后,我们可以通过getAttributes();方法来获取节点的属性值,它会返回一个NameNodeMap类型的集合,里面有节点所有的属性。

NamedNodeMap attrs=book.getAttributes();

然后通过item方法来获取attr中的属性,这个方法会返回一个Node类型的值,我们接收之后就可以通过调用 getNodeName以及getNodeValue两个方法来分别获取属性名以及属性值了。
除了获取节点的的属性之外,我们还可以获取节点的子节点。通过节点的getChildNodes函数,可以返回一个NodeList集合,里面有所有的子节点。需要注意的是子节点指的是节点中包含的所有数据,包括换行符。换行符会返回Test的值#test。在实际操作中,可以使用getNodeType函数来返回子节点的类型,从而来跳过换行符。

if(getNodeType()==Node.ELEMENT_NODE)

最后使用getNodeName函数可以获取到子节点的名字。如果还需要获得子节点的值,可以使用getTextContent函数,或者是使用getFirstChild先获取子节点的子节点,再使用getNodeValue函数来获取值。
完整的示例代码:

package com.DOM.test;

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.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) throws IOException,SAXException,NullPointerException{
        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder db=dbf.newDocumentBuilder();
            Document d=db.parse("books.xml");
            NodeList nl=d.getElementsByTagName("book");
            System.out.println("集合节点的个数:"+nl.getLength());
            for(int i=0;i

用于测试的XML文件:



    
        冰与火之歌
        乔治马丁
        2014
        89
    
    
        安徒生童话
        2004
        77
        English
    

你可能感兴趣的:(JAVA使用DOM方式来解析XML文件)