标题:解析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>