XML小練習:利用DOM解析XML(初級,實用性不強)

XML文件(candidate.xml):
<?xml version="1.0"?>
<PEOPLE>
	<PERSON PERSONID="E01">
		<NAME>Tony Blair</NAME>
		<ADDRESS>10 Downing Street, London, UK</ADDRESS>
		<TEL>(061) 98765</TEL>
		<FAX>(061) 98765</FAX>
		<EMAIL>[email protected]</EMAIL>
	</PERSON>
	<PERSON PERSONID="E02">
		<NAME>Bill Clinton</NAME>
		<ADDRESS>White House, USA</ADDRESS>
		<TEL>(001) 6400 98765</TEL>
		<FAX>(001) 6400 98765</FAX>
		<EMAIL>[email protected]</EMAIL>
	</PERSON>
	<PERSON PERSONID="E03">
		<NAME>Tom Cruise</NAME>
		<ADDRESS>57 Jumbo Street, New York, USA</ADDRESS>
		<TEL>(001) 4500 67859</TEL>
		<FAX>(001) 4500 67859</FAX>
		<EMAIL>[email protected]</EMAIL>
	</PERSON>
	<PERSON PERSONID="E04">
		<NAME>Linda Goodman</NAME>
		<ADDRESS>78 Crax Lane, London, UK</ADDRESS>
		<TEL>(061) 54 56789</TEL>
		<FAX>(061) 54 56789</FAX>
		<EMAIL>[email protected]</EMAIL>
	</PERSON>
</PEOPLE>


Java實現(Domtest1.java):

package com.xml.dom;

import java.io.File;

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

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Element;

public class Domtest1 {

	public static void main(String[] args) throws Exception {

		// 獲取DOM解析器工廠
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		// 獲得具體的DOM解析器
		DocumentBuilder db = dbf.newDocumentBuilder();
		// 解析XML文檔,獲得Document對象(根結點)
		Document document = db.parse(new File("candidate.xml"));
		//獲取根元素
		Element root = document.getDocumentElement();

		System.out.println(root.getNodeName());

		NodeList list = root.getChildNodes();
		// NodeList list = document.getElementsByTagName("PERSON");
		System.out.println(countChildElement(list) + "個PERSON\n");

		for (int i = 0; i < list.getLength(); i++) {
			if (list.item(i).getNodeType() == Node.TEXT_NODE) {
				continue;//遇到 “#text” 跳過本次循環
			}

			Element element = (Element) list.item(i);

			NamedNodeMap nnm = list.item(i).getAttributes();

			String attrname = nnm.item(0).getNodeName();

			String attrvalue = nnm.item(0).getNodeValue();

			System.out.println(attrname + ":" + attrvalue);

			String content = element.getElementsByTagName("NAME").item(0)
					.getFirstChild().getNodeValue();
			System.out.println("name:" + content);

			content = element.getElementsByTagName("ADDRESS").item(0)
					.getFirstChild().getNodeValue();
			System.out.println("address:" + content);

			content = element.getElementsByTagName("TEL").item(0)
					.getFirstChild().getNodeValue();
			System.out.println("tel:" + content);

			content = element.getElementsByTagName("FAX").item(0)
					.getFirstChild().getNodeValue();
			System.out.println("fax:" + content);

			content = element.getElementsByTagName("EMAIL").item(0)
					.getFirstChild().getNodeValue();
			System.out.println("email:" + content);

			System.out.println("================================================");
		}
	}

	//計算真正的元素格式
	private static int countChildElement(NodeList list) {
		int validCount = 0;

		for (int i = 0; i < list.getLength(); i++) {
			if (list.item(i).getNodeType() != Node.TEXT_NODE) {
				validCount++;//不對“#text”進行統計
			}
		}

		return validCount;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章