日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java如何基于DOM解析xml文件

瀏覽:24日期:2022-08-24 15:03:54

一、Java解析xml、解析xml四種方法、DOM、SAX、JDOM、DOM4j、XPath

此文針對其中的DOM方法具體展開介紹及代碼分析

sax、dom是兩種對xml文檔進行解析的方法(沒有具體實現,只是接口),所以只有它們是無法解析xml文檔的;jaxp只是api,它進一步封裝了sax、dom兩種接口,并且提供了DomcumentBuilderFactory/DomcumentBuilder和SAXParserFactory/SAXParser(默認使用xerces解釋器)。如果是嵌入式的情況下建議使用sax方法進行解析,因為它不需要一下子把數據都保存到內存中然后再解析是可以逐步解析的。而DOM不行,必須一次性把數據存到內存中,然后一并解析。這樣做雖然速度會很快,但是同時也加大了對內存的消耗。如果文件很大的情況下不建議DOM解析。

二、【DOM 簡單使用介紹】

1、【DOM(Document Object Model) 】

由W3C提供的接口,它將整個XML文檔讀入內存,構建一個DOM樹來對各個節點(Node)進行操作。

下面一段是DOM解析xml的一個案例一起來看一下。

【xml原文件】

<?xml version = '1.0' encoding = 'UTF-8'?><staffs> <staff id='1'> <name>Tom_zhang1</name> <age>19</age> <sex>男</sex> <phone>18677435526</phone> <group> <id>1</id> <name>Technical department</name> </group> </staff> <staff id='2'> <name>Susy_wang</name> <age>18</age> <sex>女</sex> <phone>18962459987</phone> <group> <id>2</id> <name>Financial department</name> </group> </staff> <staff id='3'> <name>Jack_Ma</name> <age>45</age> <sex>男</sex> <phone>1867755334</phone> <group> <id>3</id> <name>Financial department</name> </group> </staff></staffs>

【代碼】

Staff 類

package Entity;public class Staff { private int id; private String name; private int age; private String sex; private String phone; private StuGroup group; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public StuGroup getGroup() { return group; } public void setGroup(StuGroup group) { this.group = group; } public Staff() { super(); // TODO Auto-generated constructor stub } public Staff(int id, String name, int age, String sex, String phone, StuGroup group) { super(); this.id = id; this.name = name; this.age = age; this.sex = sex; this.phone = phone; this.group = group; } @Override public String toString() { return 'Staff [age=' + age + ', group=' + group + ', id=' + id+ ', name=' + name + ', phone=' + phone + ', sex=' + sex + ']'; }}

Group 類

package Entity;public class Group { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Group() { super(); // TODO Auto-generated constructor stub } public Group(int id, String name) { super(); this.id = id; this.name = name; } @Override public String toString() { return 'Group [id=' + id + ', name=' + name + ']'; } }

注釋: Staff類不需解釋,xml文件中有幾個<>就需要創建幾個字段。Group類的創建是因為group本身又是一個節點,它有它自己的字段。因此在這邊把這種情況單獨作為一個類創建,同時也方便日后維護管理。依次類推如果有更多的子類,方法一樣創建相應的類即可。

無論是DOM解析還是SAX解析,都是通過一個叫做Parser的解釋器,來對xml文件進行解析。而這個解析器是需要我們手動創建的,接下來就一起來看一下解釋器中的代碼,也是最主要的代碼。

Dom_parser(解析器)

package Parser;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;import Entity.StuGroup;import Entity.Staff;public class Dom_parser { public static List<Staff> parser(String fileName) { List<Staff> staffs = new ArrayList<Staff>(); //創建一個ArrayList來裝數據 DocumentBuilderFactory factory = null; //DocumentBuilderFactory,DocumentBuilder,Document分別是DOM解析的工廠類 DocumentBuilder builder = null; Document doc = null; Staff staff = null; //方便日后實例化 StuGroup group = null; //同上 try { factory = DocumentBuilderFactory.newInstance(); //工廠類實例化 builder = factory.newDocumentBuilder(); //工廠類實例化 doc = builder.parse(new File(fileName)); //通過.parser方法加載文件 Element root = doc.getDocumentElement(); //Element方法中的.getDocumentElement()代表獲取xml文件的頭文件內容 NodeList nodelist = root.getElementsByTagName('staff'); //獲取TagName,每一個<>中的字段為一個TagName.作為一個nodelist來保存 //循環這個NodeList,然后得到每個nodelist中的item。根據獲取到的值的索引最終通過.set方法得到這個值 for (int index = 0; index < nodelist.getLength(); index++) {staff = new Staff();Node node = nodelist.item(index);staff.setId(Integer.parseInt(node.getAttributes().getNamedItem( 'id').getTextContent()));// System.out.println(staff);NodeList childNode = node.getChildNodes(); //設置一個childNode為了存放nodelist下子<>中的TagName//同上循環子childNode這個list,獲取到每個元素的下標。再通過.set方法分別得到每個元素的值。for (int i = 0; i < childNode.getLength(); i++) { Node childitem = childNode.item(i); if (childitem.getNodeName().equals('name')) { staff.setName(childitem.getTextContent()); } else if (childitem.getNodeName().equals('age')) { staff.setAge(Integer.parseInt(childitem.getTextContent())); } else if (childitem.getNodeName().equals('sex')) { staff.setSex(childitem.getTextContent()); } else if (childitem.getNodeName().equals('phone')) { staff.setPhone(childitem.getTextContent()); } else if (childitem.getNodeName().equals('group')) { NodeList groupnode = childitem.getChildNodes(); for (int j = 0; j < groupnode.getLength(); j++) { Node groupitem = groupnode.item(j); if (groupitem.getNodeName().equals('id')) {group = new StuGroup(); //這里的實例化很重要,切記不要實例化錯誤地方String groupId = groupitem.getTextContent();group.setId(Integer.parseInt(groupId));staff.setGroup(group); } else if (groupitem.getNodeName().equals('name')) {String groupName = groupitem.getTextContent();group.setName(groupName);staff.setGroup(group); } } }}staffs.add(staff); //最終我們要把staff這個對象追加到staffs這個集合中。 } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return staffs; //返回這個集合 }}

【測試類】

package Parser; import java.util.List; import Entity.Staff; public class Test { public static void main(String[] args) { String file = 'C:/Users/IBM_ADMIN/Desktop/xml/staff.xml'; //指定文件地址 List<Staff> staffs = Dom_parser.parser(file); //因為我們創建的解析器的名字叫Dom_parser所以在這里調用Dom_parser.parser()方法。()中參數為文件地址。//循環并打印結果 for(Staff list:staffs){ System.out.println(list); } }}

【打印結果】

打印結果如下。可以看到xml中每個TageName以及對應的值,通過DOM解析的方式把結果都一一的被獲取并打印出來了。

目前我們是把數據放到了ArrayList內存中。后續可以把數據存放到數據庫中。

Staff [age=19, group=Group [id=1, name=Technical department], id=1, name=Tom_zhang1, phone=18677435526, sex=男]Staff [age=18, group=Group [id=2, name=Financial department], id=2, name=Susy_wang, phone=18962459987, sex=女]Staff [age=45, group=Group [id=3, name=Financial department], id=3, name=Jack_Ma, phone=1867755334, sex=男]

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国语精品一区| 丝袜亚洲另类欧美| 日韩av不卡在线观看| 精品72久久久久中文字幕| 奇米狠狠一区二区三区| 国产精品亚洲综合色区韩国 | 日本精品在线中文字幕| 国产精品永久| 中文字幕在线官网| 蜜臀久久久99精品久久久久久| 久久一级电影| 美女久久一区| 久久国产精品美女| 欧洲av一区二区| 久久精品国产999大香线蕉 | 久久亚洲国产精品一区二区| 日韩一级不卡| 久久精品青草| 亚洲精品一区二区妖精| 亚洲精华国产欧美| 亚洲精品国产日韩| 国产欧美日韩一级| 久久精品一本| 国产高清一区| 日韩欧美中文字幕电影| 国产精品一卡| 日韩中文首页| 国产日韩综合| 婷婷综合国产| 免费不卡在线观看| 国产66精品| 中文一区一区三区高中清不卡免费| 欧产日产国产精品视频| 国产亚洲毛片| 91大神在线观看线路一区| 国产精品亲子伦av一区二区三区| 国产一区二区三区四区五区传媒 | 免费在线观看一区| 午夜影院一区| 蜜臀av性久久久久蜜臀aⅴ流畅| 日本色综合中文字幕| 国产精品久久久亚洲一区| 免费一二一二在线视频 | 亲子伦视频一区二区三区| 免费成人在线观看| 精品一二三区| 亚洲成人精品| 日韩美女国产精品| 国产精品久久久久久久久久白浆 | 精品一区三区| 日韩中文字幕视频网| 亚洲少妇一区| 亚洲成人精品| 夜久久久久久| 亚洲1区在线观看| 日韩在线不卡| 日本精品国产| 国产精品成人a在线观看| 亚洲成人日韩| 国产欧美自拍| 好看的av在线不卡观看| 国产精品一区免费在线| 欧美一区二区性| 久久精品影视| 丝袜国产日韩另类美女| 狠狠色综合网| 电影亚洲精品噜噜在线观看| 日韩影院精彩在线| 亚洲天堂日韩在线| 亚洲影视一区| 亚洲综合另类| 国产精品久久免费视频| 国产乱码精品一区二区三区四区| 免费在线欧美黄色| 视频国产精品| 日本在线不卡视频| 成年男女免费视频网站不卡| 国产精品入口久久| 国产精品一区二区三区四区在线观看 | 国产一区二区精品| 97久久亚洲| 一区二区三区午夜视频| 亚洲国产福利| 精品亚洲成人| 麻豆高清免费国产一区| 国产精品99精品一区二区三区∴| 视频一区中文字幕| 亚洲欧洲一区| 国产欧美午夜| 亚洲日产av中文字幕| 亚洲人妖在线| 伊人久久大香线蕉av不卡| 国产精品久久久久久av公交车| 蜜乳av另类精品一区二区| 91久久中文| 色偷偷色偷偷色偷偷在线视频| 久久久精品网| 欧美一区二区三区高清视频| 午夜在线播放视频欧美| 国产成人久久精品一区二区三区| 黄色日韩在线| 国产综合视频| 亚洲精品四区| 国产精品精品| 高清日韩欧美| 玖玖玖国产精品| 日韩国产91| 欧美日韩激情| 国产精成人品2018| 久久国产电影| 日本a级不卡| 中文字幕系列一区| 国产一区二区久久久久| 久久在线免费| 91九色综合| 一区二区日韩免费看| 91精品电影| 国产精品二区影院| 日韩二区三区在线观看| 777久久精品| 欧美一区久久| 日韩国产在线不卡视频| 日本不卡在线视频| 日本在线精品| 日本91福利区| 国产成人精品一区二区免费看京| 亚洲91精品| 国产精品久久久久久模特| 999久久久精品国产| av资源中文在线天堂| av资源新版天堂在线| 亚洲精品成人| 久久电影tv| 99久久99久久精品国产片果冰| 国产精品sss在线观看av| 少妇精品导航| 久久精品观看| 免费欧美日韩| 日韩免费精品| 久久精品动漫| 青草久久视频| 在线一区电影| 国产一卡不卡| 日韩在线中文| 欧美精品国产| 国产午夜精品一区二区三区欧美| 亚洲最新av| 亚洲一级影院| 欧美亚洲一级| 欧美~级网站不卡| 国产日韩欧美中文在线| 日韩精品久久理论片| 国产免费久久| 欧美日韩一区二区三区不卡视频| 性色av一区二区怡红| 石原莉奈一区二区三区在线观看| 精品亚洲精品| 日韩高清不卡一区二区| 日韩精品一区二区三区av| 婷婷精品久久久久久久久久不卡| 蜜臀国产一区二区三区在线播放| 欧美专区在线| 先锋亚洲精品| 亚洲区欧美区| 国产精品久久久网站| 日本一区二区三区视频在线看| 日韩精品1区2区3区| 国产伦精品一区二区三区视频 | 激情欧美国产欧美| 国产精品一区二区三区av| 亚洲婷婷在线| 美女视频免费精品| 国产精品午夜av| 国产亚洲久久| 久久国产婷婷国产香蕉| 黄色成人在线网址| 中文字幕av一区二区三区人| 亚洲深爱激情| 久久国产亚洲精品| 麻豆久久一区| 亚州av日韩av| 亚洲精品动态| 亚洲有吗中文字幕| 天堂久久一区| 玖玖玖国产精品| 影院欧美亚洲| 黄色日韩在线| 影院欧美亚洲| 国产精品日本| 免费日韩视频| 999精品色在线播放| 久久精品国产99久久| 国产精品高颜值在线观看| 国产精品22p| 午夜精品影视国产一区在线麻豆| 欧美性感美女一区二区| xxxxx性欧美特大| 国产成人免费视频网站视频社区| 日韩深夜视频| 电影亚洲精品噜噜在线观看 |