Dom解析Xml文件:
解析文件的思路很简单,就是根据xml标签来获取元素然后对获取的NodeList里面的内容进行提取。
下面给出一个xml文件,对它进行简单的分析
<?xml version="1.0" encoding="UTF-8" ?>
<ArrayOfString>
<string>郑州 (57083)</string>
<string>开封 (57091)</string>
<string>洛阳 (57073)</string>
<string>平顶山 (57171)</string>
<string>焦作 (53982)</string>
<string>鹤壁 (53990)</string>
<string>新乡 (53986)</string>
<string>安阳 (53898)</string>
<string>濮阳 (54900)</string>
<string>许昌 (57089)</string>
<string>漯河 (57186)</string>
<string>三门峡 (57051)</string>
<string>南阳 (57178)</string>
<string>商丘 (58005)</string>
<string>信阳 (57297)</string>
<string>周口 (57195)</string>
<string>驻马店 (57290)</string>
</ArrayOfString>
我们以标签<string>来进行解析,把解析的结果存如一个List<String>中,根据<string>标签获取一个NodeList(内容的排序为从上到下),然后我们遍历NodeList从对应的Node中提取Node值(注意:程序中的in只要是一个xml信息流即可,可以从本地xml文件读取也可以通过网络请求获得)。
List<String> list = new ArrayList<>();
//解析xml流
Document doc;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
try {
db = dbf.newDocumentBuilder();
doc = db.parse(in);
NodeList nl = doc.getElementsByTagName("string");
for(int i = 0 ; i < nl.getLength(); i++ ){
Node n = nl.item(i);
if(n.getFirstChild().getNodeValue().equals("查询结果为空!")){
list.add("查询结果为空!");
break ;
}
list.add(n.getFirstChild().getNodeValue());
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
最后总计一下在解析xml文件的时候常用的一些方法,这段代码复制之后可以正常运行:
URL url = new URL("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName=河南");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(6000);
Document doc;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
db = dbf.newDocumentBuilder();
doc = db.parse(urlConnection.getInputStream());
//获取文档根元素对象
Element root = doc.getDocumentElement();
//获取根元素下一级子元素的所有元素
NodeList nodeList = root.getChildNodes();
//获取指定节点列表
NodeList nodeList2 = doc.getElementsByTagName("string");
//遍历节点列表
for(int i = 0 ; i < nodeList2.getLength(); i++){
//获取一个Node对象
Node node = nodeList2.item(i);
//从子Node中获取一个NodeList
NodeList nodeList3 = node.getChildNodes();
//解析xml时常用的Node的一些方法
System.out.println(node);
System.out.println("Node的节点名字"+node.getNodeName());
System.out.println("获取对应Node包含的内容"+node.getFirstChild().getNodeValue());
System.out.println("获取对应Node包含的内容"+node.getTextContent());
break;
}