解析XML文本

标题:解析XML文本
作者:kagula
日期:2008-01-04

目的:
以后万一用到要解析xml的需求,从这里抄一下,就是了,哈哈,主要是给自己用的(免的以后再到网上瞎找)。

环境:
  [1]所需xml-apis.jar文件,可以在struts1.2.x中找到


正文:
[1]解析指定xml文件的源码
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

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

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

public class CReadXML {

/*
入口参数:源xml文件的绝对路径
返回:一组记录行,每个记录行中含Map类对象,其中的Key为字段名称,value为字段的值!
*/
public ArrayList readXMLFile(String path) throws Exception {

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;

ArrayList list = new ArrayList();
try {
db = dbf.newDocumentBuilder();
}

catch (ParserConfigurationException pce) {
pce.printStackTrace();
}

Document doc = null;

try {
doc = db.parse(path);
}
catch (DOMException dom) {
dom.printStackTrace();
}
catch (IOException ioe) {
ioe.printStackTrace();
}

Element root = doc.getDocumentElement();
NodeList fields = root.getElementsByTagName("REC"); //取REC标签中,记录的内容

for (int i = 0; i < fields.getLength(); i++) {
Element rec = (Element) fields.item(i);
NodeList datas = rec.getChildNodes();
HashMap map=new HashMap();
//取行记录.begin
for(int j=0;j<datas.getLength();j++)
{
Node node=(Node)datas.item(j);
map.put(node.getNodeName(), node.getTextContent());
}
//取行记录.end
list.add(map);
}

return list;

}
}

[2]源xml文件,部份
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE TRS [
<!ELEMENT TRS (REC)>
<!ELEMENT REC (G_Rid,G_ID,G_Name,G_Email,G_Home,G_Sort,Hot,Reply,G_Type,hd_Content,G_Data,G_Rdata,G_Rname,IP_address,checked,G_Subject,ExprSubject,G_Content,tw_name,tw_Email,rowid,br)>
<!ELEMENT G_Rid (#PCDATA | br)*>
<!ELEMENT G_ID (#PCDATA | br)*>
<!ELEMENT G_Name (#PCDATA | br)*>
<!ELEMENT G_Email (#PCDATA | br)*>
<!ELEMENT G_Home (#PCDATA | br)*>
<!ELEMENT G_Sort (#PCDATA | br)*>
<!ELEMENT Hot (#PCDATA | br)*>
<!ELEMENT Reply (#PCDATA | br)*>
<!ELEMENT G_Type (#PCDATA | br)*>
<!ELEMENT hd_Content (#PCDATA | br)*>
<!ELEMENT G_Data (#PCDATA | br)*>
<!ELEMENT G_Rdata (#PCDATA | br)*>
<!ELEMENT G_Rname (#PCDATA | br)*>
<!ELEMENT IP_address (#PCDATA | br)*>
<!ELEMENT checked (#PCDATA | br)*>
<!ELEMENT G_Subject (#PCDATA | br)*>
<!ELEMENT ExprSubject (#PCDATA | br)*>
<!ELEMENT G_Content (#PCDATA | br)*>
<!ELEMENT tw_name (#PCDATA | br)*>
<!ELEMENT tw_Email (#PCDATA | br)*>
<!ELEMENT rowid (#PCDATA | br)*>
<!ELEMENT br EMPTY>
]>
<TRS>
<REC>
<G_Rid>6126</G_Rid><br/><br/>
<G_ID>6127</G_ID><br/><br/>
<G_Name>webmaster</G_Name><br/><br/>
<G_Email>nbda@zj001.net</G_Email><br/><br/>
<G_Sort>Reply</G_Sort><br/><br/>
<Hot>1</Hot><br/><br/>
<Reply>0</Reply><br/><br/>
<hd_Content> 详情请电询87297639(市档案局法规处)</hd_Content><br/><br/>
<G_Data>2004.02.27 09:54:00</G_Data><br/><br/>
<G_Rdata>2004.02.27 09:54:00</G_Rdata><br/><br/>
<G_Subject>《档案证》考前培训?</G_Subject><br/><br/>
<G_Content>我想咨询一下,我想报名双修日的档案考试培训,去哪里报名?具体课程安排如何?</G_Content><br/><br/>
<tw_name>小小</tw_name><br/><br/>
</REC>

<REC>
<G_Rid>6128</G_Rid><br/><br/>
<G_ID>6129</G_ID><br/><br/>
<G_Name>webmaster</G_Name><br/><br/>
<G_Sort>Reply</G_Sort><br/><br/>
<Hot>1</Hot><br/><br/>
<Reply>0</Reply><br/><br/>
<hd_Content> 目前没有试卷提供这项服务。</hd_Content><br/><br/>
<G_Data>2004.03.03 15:37:00</G_Data><br/><br/>
<G_Rdata>2004.03.03 15:37:00</G_Rdata><br/><br/>
<G_Subject>《档案证》考试历年的试题?</G_Subject><br/><br/>
<G_Content> 由于《档案证》考前培训放在工作日开展,而本人又不能从工作日中抽出时间去听课,以前又没有接触过这类的考试,想咨询一下哪有买或下载这类练习卷,最好是历年的测试卷,以便熟悉题型,有重点的看书,可顺利通过考试。</G_Content><br/><br/>
<tw_name>小小</tw_name><br/><br/>
</REC>

....略....

</TRS>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值