您的位置:首页 > 其它

使用DOM 解析XML文档

2014-06-18 10:56 429 查看
book.xml

<?xml version="1.0" encoding="UTF-8"?>

<books>

<book email="chenyuzhu">

<name>JAVA</name>

<price>20.00</price>

</book>

<book email="chenyuzhu1">

<name>C#</name>

<price>10.00</price>

</book>

</books>

JAVA类

package domxml;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

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.Node;

import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;

public class DomDemo

{

public DomDemo()

{

// 得到DOM解析器的工厂实例

DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();

try

{

// 从DOM工厂获得DOM解析器

DocumentBuilder builder = domfac.newDocumentBuilder();

// 把要解析的XML文档转化为输入流,以便DOM解析器解析它

InputStream inputStream = new FileInputStream("src/book.xml");

// 解析XML文档的输入流,得到一个Document对象

Document document = builder.parse(inputStream);

// 得到XML文档的根节点

Element element = document.getDocumentElement();

// 得到节点的子节点

NodeList books = element.getChildNodes();

if (books != null)

{

for (int i = 0; i < books.getLength(); i++)

{

Node book = books.item(i);

// 取得节点的属性值

if (book.getNodeType() == Node.ELEMENT_NODE)

{

{

String email = book.getAttributes().getNamedItem("email").getNodeValue();

System.out.println(email);

// 轮循子节点

for (Node node = book.getFirstChild(); node != null; node = node.getNextSibling())

{

if (node.getNodeType() == Node.ELEMENT_NODE)

{

if (node.getNodeName().equals("name"))

{

// name是一个空值,因为DOM把<name>JAVA</name>也当作是两层结构的节点,其父节点是<name>,子节点JAVA才是我们真正想得到的。

String name = node.getNodeValue();

String name1 = node.getFirstChild().getNodeValue();

System.out.println("=====name====" + name + "======name1=====" + name1);

}

if (node.getNodeName().equals("price"))

{

String price = node.getFirstChild().getNodeValue();

System.out.println(price);

}

}

}

}

}

}

}

}

catch (ParserConfigurationException e)

{

e.printStackTrace();

}

catch (FileNotFoundException e)

{

e.printStackTrace();

}

catch (SAXException e)

{

e.printStackTrace();

}

catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void main(String[] args)

{

new DomDemo();

}

}

打印结果:

chenyuzhu

=====name====null======name1=====JAVA

20.00

chenyuzhu1

=====name====null======name1=====C#

10.00
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: