博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Java]XML数据的请求和DOM技术解析
阅读量:6641 次
发布时间:2019-06-25

本文共 3742 字,大约阅读时间需要 12 分钟。

刚刚看到一条微博

今天距离2009级离校倒计时还有100天

借用“三国杀”里面张辽归天说的一句话——“真的没想到”。这浑浑噩噩的四年没想到就快没了。没想到啊。

临近毕业季,虽说没课,但是繁琐的事情很多。工作,毕业设计,论文,实习报告……单单找工作就让焦头烂额。也就因为这诸多的原因,博客很久没有更新。这也算是给某公司面试官的回答吧。

言归正传,技术人终究讲技术。由于毕业设计的缘故,需要写Java解析XML文件。(说起毕业设计就想起坑爹的队友,三个人的小组就我一个人在奋斗。坑啊……)下面分享如何用Java解析XML。

 


名词解释

XML在维基百科是这样解释的(大家都知道是什么,我就没有深究的必要了吧)

可扩展标记语言(:eXtensible Markup Language,简称:XML),是一种。

Java解析XML的方式有很多。有用PULL的,有用SAX的,这里分享最原始的,用DOM解析。其它改日再论。

DOM是什么?

DOM,全称Document Object Model,即“文档对象模型”。

DOM是一种用于XML文档对象模型,可用于直接访问XML文档的各个部位。在DOM中,文档被模拟为树状,其中XML语法的每一个组成部分都表示一个节点,DOM允许用户遍历文档树,从父节点移动到子节点和兄弟节点。


XML原始文件

先给一个XML文件,当然你也可以将其摆在服务器上面,这样看上去比较酷。

View Code XML文件

本人将该文件student.xml放在自己机器上面的iis上面。当浏览器访问的时候即可以访问到。


Object对象

根据XML的数据及类型新建一个类,类的成员和XML的属性相对应,并且给类的成员生成get和set方法以及类的toString()方法方便显示结果。以下是一个实例:

View Code Student类

解析方法

新建一个类(本人用例新建的是是DomService类),在类里面编写一个解析XML文件的方法。该方法使用DOM技术解析数据并且将XML文件转换为一个List集合。详细请看代码。

1 //将XML转换为对象 2 public List
getStudents(InputStream inputStream) throws Exception { 3 List
list = new ArrayList
(); 4 // 创建一个Document解析工厂 5 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 6 DocumentBuilder builder = factory.newDocumentBuilder(); 7 // 将输入流解析为Document 8 Document document = builder.parse(inputStream); 9 // 整个文档就是一个节点文档 所以该节点就是所有内容10 Element ele = document.getDocumentElement();11 NodeList nodeList = ele.getElementsByTagName("student"); //获取所有student节点 并且进行遍历12 for (int i = 0; i < nodeList.getLength(); i++) {13 Element ele2 = (Element) nodeList.item(i); //具体的一个student节点14 Student student = new Student();15 student.setId(Integer.parseInt(ele2.getAttribute("id")));16 //获取student节点下面的所有子节点 并且进行遍历17 NodeList nodeList2 = ele2.getChildNodes();18 for (int j = 0; j < nodeList2.getLength(); j++) {19 if (nodeList2.item(j).getNodeType() == Node.ELEMENT_NODE) { //如果该节点是元素节点20 if ("name".equals(nodeList2.item(j).getNodeName())) {21 student.setName(nodeList2.item(j).getFirstChild()22 .getNodeValue());23 } else if ("phoneno".equals(nodeList2.item(j).getNodeName())) {24 student.setPhone(nodeList2.item(j).getFirstChild()25 .getNodeValue());26 } else if ("login".equals(nodeList2.item(j).getNodeName())) {27 student.setLogin(Boolean.parseBoolean(nodeList2.item(j)28 .getFirstChild().getNodeValue()));29 }30 }31 }32 list.add(student); //添加到集合33 }34 return list;35 }

DOM解析要根据具体的XML结构进行代码编写。总体来说比较灵活而且比较容易理解。但是如果XML文件深度比较大的话,DOM解析的效率就会大大地降低。因为DOM的解析会随着深度而进行循环,多重循环的效率不高。所以不是很推荐,特别是XML很深的时候。

 


HTTP请求

由于本人将XML放在服务器上面,下面也说说如果用Java代码获取XML文件。我写了下面一个方法。

View Code http请求方法

下面我们就可以对服务器进行XML请求并且对XML解析了。

 


测试结果

在Main方法中编写

public static void main(String[] args) {    // TODO Auto-generated method stub    String path = "http://localhost/student.xml";    InputStream input = HttpUtils.getXML(path);    DomService service = new DomService();    try {        List
list = service.getStudents(input); for (Student student : list) { System.out.println(student.toString()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }}

发布代码,得到结果

Student [id=1, name=张三, phone=621380, login=true]

Student [id=1, name=李四, phone=641234, login=true]
Student [id=1, name=王五, phone=67890, login=false]

完整项目代码下载:


------我是无聊的分割线-------

以上是鄙人学习DOM解析和数据传输的过程。希望对您也能有所帮助。

 

本文转自 Ron Ngai 博客园博客,原文链接:http://www.cnblogs.com/rond/archive/2013/03/23/2976628.html  ,如需转载请自行联系原作者

你可能感兴趣的文章
报表服务入门(实验8)部署报表
查看>>
在Bat批处理中调用Powershell脚本
查看>>
搜索正在移动社交化
查看>>
SFB 项目经验-36-分配公网证书 For SFB 2015-前端服务器(图解)
查看>>
2015前半年热门营销渠道解析
查看>>
任正非签发百万年终奖,荣耀值得如此“厚待”?
查看>>
学习C语言,困难吗?
查看>>
【震惊】百度推广网站被植入广告?这是善意还是恶意的?
查看>>
当存储无可用空间时无法启动虚拟机
查看>>
extern “C”总结
查看>>
获取用户id
查看>>
silverlight:telerik RadControls中RadGridView的一个Bug及解决办法
查看>>
ProgressForm
查看>>
管理之困:居高不下的流动率
查看>>
WPF之ComboBox的VisualTreeHelper
查看>>
spring开发_Spring+Hibernate_HibernateDaoSupport
查看>>
svn 客户端批量备份数据(图+文)
查看>>
GraphicsMagick的安装以及使用
查看>>
SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别
查看>>
find中的mtime,工作中遇(一直在改变系列5)
查看>>