Chinese To English     英文 转 中文             
         
随笔-27  评论-53  文章-0  trackbacks-0
1、XML文件persons.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<persons>
  
<person><name>jak</name><sex></sex></person>
  
<person>
    
<name>jcy</name>
    
<sex></sex>
  
</person>
</persons>

2、java解析代码如下:

 1 package net.vicp.jiasoft;
 2 
 3 import javax.xml.parsers.*;
 4 import java.io.IOException;
 5 import org.xml.sax.SAXException;
 6 import org.w3c.dom.Document;
 7 import org.w3c.dom.NodeList;
 8 import org.w3c.dom.Node;
 9 
10 /**
11  * <p>Title: Dom解析XML示例</p>
12  *
13  * <p>Description: Dom解析XML</p>
14  *
15  * <p>Copyright: Copyright (c) 2008</p>
16  *
17  * <p>Company: Jiasoft</p>
18  *
19  * @author Jak.Shen
20  * @version 1.0
21  */
22 public class DomXml {
23     public void parsersXml() {
24         //实例化一个文档构建器工厂
25         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
26         try {
27             //通过文档构建器工厂获取一个文档构建器
28             DocumentBuilder db = dbf.newDocumentBuilder();
29             //通过文档通过文档构建器构建一个文档实例
30             Document doc = db.parse("persons.xml");
31             //获取所有名字为 “person” 的节点
32             NodeList nl1 = doc.getElementsByTagName("person");
33             int size1 = nl1.getLength();
34             for (int i = 0; i < size1; i++) {
35                 Node n = nl1.item(i);
36                 //获取 n 节点下所有的子节点。此处值得注意,在DOM解析时会将所有回车都视为 n 节点的子节点。
37                 NodeList nl2 = n.getChildNodes();
38                 //因为上面的原因,在此例中第一个 n 节点有 2 个子节点,而第二个 n 节点则有 5 个子节点(因为多了3个回车)。
39                 int size2 = nl2.getLength();
40                 for (int j = 0; j < size2; j++) {
41                     Node n2 = nl2.item(j);
42                     //还是因为上面的原因,故此要处判断当 n2 节点有子节点的时才输出。
43                     if (n2.hasChildNodes()) {
44                         System.out.println(n2.getNodeName() + " = " +
45                                            n2.getFirstChild().getNodeValue());
46                     }
47                 }
48             }
49         } catch (ParserConfigurationException ex) {
50             ex.printStackTrace();
51         } catch (IOException ex) {
52             ex.printStackTrace();
53         } catch (SAXException ex) {
54             ex.printStackTrace();
55         }
56     }
57 
58     public static void main(String[] args) {
59         DomXml domxml = new DomXml();
60         domxml.parsersXml();
61     }
62 }




杰森 
邮箱:json.shen(at)gmail.com
网站:www.shenjia.org
posted on 2008-05-24 15:42 杰森 阅读(13412) 评论(11)  编辑  收藏 所属分类: JavaSE

评论:
# re: Java Dom解析XML 2008-05-27 10:12 | JAVA_START
嘿嘿!  回复  更多评论
  
# re: Java Dom解析XML[未登录] 2008-08-08 15:55 | Scott.H
<person id="1">
</person>

这里的id应该怎么得到呢  回复  更多评论
  
# re: Java Dom解析XML 2008-08-10 12:46 | Jak.Shen
@Scott.H

你说的id是person节点的属性,属性不是子节点,所以获取上面所写的nl1的属性id即可。
nl1.getAttributes();  回复  更多评论
  
# re: Java Dom解析XML 2008-11-12 15:31 | 慕娉婷
谢谢你!  回复  更多评论
  
# re: Java Dom解析XML 2008-11-12 16:58 | Huaxu's
@慕娉婷
不用客气!
  回复  更多评论
  
# re: Java Dom解析XML 2011-06-22 09:48 | 李潇
谢了,这两天一直纠结那个java dom解析xml为什么子节点数总是不对,总是多几个,现在明白了,是把回车当子节点了,还需要多一层判断。谢谢你的文章  回复  更多评论
  
# re: Java Dom解析XML 2011-12-20 14:02 | dellheng
多谢博主提醒:此处值得注意,在DOM解析时会将所有回车都视为 n 节点的子节点。
我试用了以下几种判断
if(childNode.hasChildNodes()) 有子节点或TextContent才行
if(childNode.hasAttributes()) 有属性才行
if(childNode.getNodeName().equals("part")) 必须使用节点名称
这个最好 是判断类型的
if(childNode.getNodeType()==Node.ELEMENT_NODE)
希望对大家有帮助  回复  更多评论
  
# re: Java Dom解析XML[未登录] 2012-05-22 19:37 | java
怎么换个XML文件该程序就解析不了了啊  回复  更多评论
  
# re: Java Dom解析XML[未登录] 2012-06-03 16:19 | hello
以前写js的时候就郁闷了很久很久。。。@李潇
  回复  更多评论
  
# re: Java Dom解析XML 2012-07-16 15:26 | http://www.legow.cn/
# re: Java Dom解析XML[未登录] 2014-07-07 17:13 | howard
怎么获取name对应的内容是什么呢  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
嗨117