一、准备
使用JDK1.5。
test.xml:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book email="abc@abc.com">
<name>bookName</name>
<price>100.2</price>
</book>
</books>
注意XML放在工程根目录下。
二、解析代码
package com.test;
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 TestXML
{
/**
* 解析一个指定的物理路径的XML 文档,并输出有关信息。
* @author ZHOU
* @param args
*/
public static void main(String[] args)
{
/** 创建 DOM 解析器工厂类*/
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
/** DOM 对象*/
Document document = null;
InputStream is = null;
try
{
/** 获取 DOM 解析器*/
DocumentBuilder builder = factory.newDocumentBuilder();
/** 与 XML 实际文件连接并创建一个输入流*/
is = new FileInputStream("test.xml");
/** 解析XML文档的输入流,得到一个 Document 对象*/
document = builder.parse(is);
}
catch (ParserConfigurationException e)
{
e.printStackTrace();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (SAXException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (null != is)
{
is.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
/** 获取 DOM 对象的根节点对象*/
Element element = document.getDocumentElement();
/** 获取 DOM 对象的根节点的所有子节点*/
NodeList nodes = element.getChildNodes();
/* 循环遍历所有子节点 */
for (int i = 0; i < nodes.getLength(); i++)
{
/** 取出某一个节点*/
Node node = nodes.item(i);
/** 判断取出节点的类型,如果为元素节点就输出该节点的 email 属性的值*/
if (Node.ELEMENT_NODE == node.getNodeType())
{
// 首先获取所有属性,然后根据属性名获取该节点的值
System.out.println(node.getAttributes()
.getNamedItem("email").getNodeValue());
}
/** 轮循子节点*/
for (Node n = node.getFirstChild(); n != null; n = n.getNextSibling())
{
/** 判断取出节点的类型,如果为元素节点就输出该节点的值*/
if (Node.ELEMENT_NODE == n.getNodeType())
{
// 首先获取该节点的第一个子节点,然后取值
System.out.println(n.getFirstChild().getNodeValue());
}
}
}
}
}
解析后的结果: