Java XML解析系列

Java解析XML有多种方式,因此需要分为几个不同的系列来讲。具体安排如下:

1. DOM最基本解析XML;
2. SAX基于事件解析XML; http://gaofulai1988.iteye.com/blog/2262677
3. JDOM不错的解析XML; http://gaofulai1988.iteye.com/blog/2262680
4. DOM4J好用的解析XML; http://gaofulai1988.iteye.com/blog/2262683
5. XPATH解析XML; http://gaofulai1988.iteye.com/admin/blogs/2262787
6. XML与Bean之间的转换。 http://gaofulai1988.iteye.com/admin/blogs/2262787

这一个是讲DOM解析XML,DOM的基本思想是将XML文档解析成一个树型,然后依据父子节点、弟兄节点来遍历这棵树。所以它的最大特点是在解析前,先将整个文档载入,这也是它最大的不足之处,如果这个XML文件很大,怎么办呢?

在使用DOM之前,有两种概念提前说一下,Node(节点)和Element(元素)之间的区别,有一个结论是: Element一定是Node,Node不一定是Element。如何来理解?

  <name>test</name>


name既是一个节点也是一个元素,而test只是一个节点,而不是一个元素。

好了,看一个例子吧。先准备好xml文件。

<?xml version="1.0" encoding="UTF-8"?>    
<Students>
   <student>
       <NO id="123">123456</NO>
	   <NAME>abc</NAME>
   </student>
   <student>
   
       <NO id="234">456789</NO>
	   <NAME>def</NAME>
   </student>
</Students>


DOM解析代码如下:
public static void main(String args[]) throws ParserConfigurationException,
			SAXException, IOException {
		// xml文件的路径
		File f = new File("D:" + File.separator + "test.xml");
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		// 解析成一个Document对象
		Document doc = builder.parse(f);
        // 根据标签名获取所有的节点
		NodeList nl = doc.getElementsByTagName("student");
		
		for (int i = 0; i < nl.getLength(); i++) {
			// 输出标签的值
			System.out.print("No:"
					+ doc.getElementsByTagName("NO").item(i).getFirstChild()
							.getNodeValue());
			
			System.out.print("\taddress:"
					+ doc.getElementsByTagName("NAME").item(i).getFirstChild()
							.getNodeValue());
			// Element一定是Node, Node不一定是Element
			Element e=(Element)doc.getElementsByTagName("NO").item(i);
			// 输出属性值
			System.out.println("\tid="+e.getAttribute("id"));
		}
	}

你可能感兴趣的:(java,xml,dom,解析xml)