BlogAD

2015年1月25日 星期日

Parsing XML Data with DOM



[Java]Parsing XML Data with DOM

參考資料:http://blog.johnsonlu.org/category/program/java/
Java解析xml或rss的方法有好幾種
這邊紀錄一下透過javax.xml和org.w3c.dom將xml轉換成DOM tree
範例用xml:
1<?xml version="1.0" encoding="UTF-8"?>
2<channel>
3    <title>Title</title>
4    <link>http://google.com</link>
5    <description>Description</description>
6    <generator>Codeigniter</generator>
7    <item>
8        <title><![CDATA[XXXXXX]]></title>
9        <link>http://google.com/article/517.html</link>
10        <creator>行政部</creator>
11        <pubDate>Tue, 03 Jul 2012 00:00:01 +0800</pubDate>
12        <description><![CDATA[內文內文]]></description>
13        <category></category>
14    </item>
15</channel>
Java:
1import javax.xml.parsers.DocumentBuilderFactory;
2import javax.xml.parsers.DocumentBuilder;
3import org.w3c.dom.Document;
4import org.w3c.dom.NodeList;
5import org.w3c.dom.Node;
6import org.w3c.dom.Element;
7
8public class ParseXML {
9    public static void main(String argv[]) {
10        try {
11            //定義XML DOM parser解析器
12            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
13            //建立DOM document
14            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
15            //引入xml
16            Document doc = dBuilder.parse("http://test.com/test/test.xml");
17            //針對xml文檔的元素做normalize
18            doc.getDocumentElement().normalize();
19
20            //XML根節點
21            System.out.println("Root Element :" + doc.getDocumentElement().getNodeName());
22
23            //取得所有item元素
24            NodeList nList = doc.getElementsByTagName("item");
25            for (int temp = 0; temp < nList.getLength(); temp++) {
26                //取得該item裡的元素
27                Node nNode = nList.item(temp);
28                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
29                    Element eElement = (Element) nNode;
30                    System.out.println("Title : " + getTagValue("title", eElement));
31                    System.out.println("Link : " + getTagValue("link", eElement));
32                    System.out.println("Creator : " + getTagValue("creator", eElement));
33                }
34            }
35        catch (Exception e) {
36            e.printStackTrace();
37        }
38    }
39    //取得元素的值(過濾掉cdata-section等標記)
40    private static String getTagValue(String sTag, Element eElement) {
41        NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
42        Node nValue = (Node) nlList.item(0);
43        return nValue.getNodeValue();
44    }
45
46}

沒有留言:

張貼留言