Dom解析复杂的Xml(另:getElementsByClassname()和getChildNodes()的应用)
来源:互联网 发布:java opencv 人脸比对 编辑:程序博客网 时间:2024/06/06 09:29
- 以前都用为知笔记,这次弄这个dom解析实在太麻烦了,弄了好几天才弄明白,网上一直没有复杂一点的例子,所以这次经过测试以后,把这两个函数小说下.大家看到了可以指点一下.
首先适用场景
(可能部分跑题,大家见谅)
我会先贴出网上一个xml文件,这个是比较复杂的,和网络上面的那些例子不一样,我会一层一层说.
然后重点就来了,我想要City节点下面的Name,AQi,Color.那么我本来想的是直接用Pull解析(Android中的,我是安卓编程的.),如果人们的xml就是这么简单的话,就不用往下看了,直接去找pull解析教程.
但是这里要说的是,下面的Pointers中有重复的节点!!!直接上图
然后就是getElementsByClassname()和getChildNodes的应用和区别
在这里就不继续放我这个xml结构的图片了,上面已经说完了.
我先说一下dom解析的小步骤(因为我是自学的,都是我自己总结的,不对别喷我)
//1.创建Dom工厂对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //2.获取DocumentBuilder对象 DocumentBuilder builder = factory.newDocumentBuilder(); //3.获取文档对象(大概就是把流改成内容) Document document = builder.parse(is); //4.获取文档对象的根节点(最外面的那个节点) Element root = document.getDocumentElement(); //5.获取根节点下的子节点(所有叫这个名字的元素节点) NodeList systemNodes = root.getElementsByTagName("System"); //6.遍历所有的System节点 for (int i = 0; i < systemNodes.getLength(); i++) { //7.这是从所有System节点中抽取每一个System Element systemNode = (Element) systemNodes.item(i); //8.这个是每一个System中的子节点 NodeList systemChildNodes = systemNode.getChildNodes(); //9.然后遍历的是每一个Ststem中的子节点 for (int j = 0; j < systemChildNodes.getLength(); j++) { //10.获得子节点 Node node = systemChildNodes.item(j); //11.判断node节点是否是元素节点 if (node.getNodeType() == Node.ELEMENT_NODE) { //12.把节点转换成元素节点 Element element = (Element) node; //13.判断元素节点是否是需要的元素节点 if ("Updatetime".equals(element.getNodeName())) { ConstantValue.UPDATETIME = element.getFirstChild().getNodeValue(); } } } //14.把city添加到list集合中 } is.close(); return citys;
- 然后切入主题,如果dom解析还有不懂得地方自己上网搜.
在上面代码中第5步用到了getElementsByClassname(String name). - 我经过测试发现,这个是获取一个元素对象(Element )的下面所有叫name的子节点.(上面其实就一个System,所以可以不遍历)
然后 而getChildNodes()则是获得当前节点下面所有子节点
举例也就是
- Citys的话就是获得他的直接子孩子City节点(13个).
- Citys用 getElementsByClassname(“City”)的话,就包括了每个Pointer下面的City节点(100+个)
上面就是他俩的区别了.不过直接用getChildNodes().获得City的话真实测试是27个,结果是这样的
city长度:#textcity长度:Citycity长度:#textcity长度:Citycity长度:#textcity长度:Citycity长度:#textcity长度:Citycity长度:#textcity长度:Citycity长度:#textcity长度:Citycity长度:#textcity长度:Citycity长度:#textcity长度:Citycity长度:#textcity长度:Citycity长度:#textcity长度:Citycity长度:#textcity长度:Citycity长度:#textcity长度:Citycity长度:#textcity长度:Citycity长度:#text
- 想了想知道那个getChildNodes()返回的是什么了,记得以前在那个博客上面看到过.
- 那个是后面的空格和回车
- 这里就不画图了,也就是这个getChildNodes()返回的值是每一个子节点和子节点后面的空格,再加上一个父节点后面的空格. 13+13+1=27. 我测试了一下别的也是这样
- 用的时候只要减一在除以2就是全部的子节点了.想只要city的话就这样就行了
Element citys = (Element)cityList.item(0); NodeList city = citys.getChildNodes(); for (int i=0;i < city.getLength();i++){ //此时的city节点的item上,有的是一个城市的所有数据 Node node = city.item(i); if (node.getNodeName().equalsIgnoreCase("city")) { //这是一个有效的节点
PS:我Android是自学的,以前都是做笔记,博客也是第一次写(格式不好请包涵).估计有好多没用的东西,但是整个思路把我遇到的问题都涵盖了.我只是想帮助一些网友,有帮助给个评论,有错误也欢迎指点. 但是说文笔不好什么的,要喷人就请按下Alt+F4,谢谢合作.
0 0
- Dom解析复杂的Xml(另:getElementsByClassname()和getChildNodes()的应用)
- java xml文件的getChildNodes()解析问题
- 解析XML文件时,getChildNodes().getLength()与实际不符的解决方法
- XML的SAX解析和DOM解析
- JSON和XML的复杂解析
- java dom xml解析和windows dom解析的区别
- xml的dom解析
- XML的Dom解析
- XML的解析DOM
- XML的DOM解析
- DOM和SAX解析XML的区别
- XML 的 解析 :DOM 和 SAX
- DOM和SAX的XML解析
- XML配置文件的dom和sax解析
- XML文件的解析和生成(DOM)
- SAX和Dom解析XML的区别
- XML解析的SAX和DOM
- JAVA操作XML四(理解):有关getChildNodes的理解
- leecode 解题总结:264. Ugly Number II
- mybatis的xml文件没有提示,出现the file cannot be validated as the XML definition.....
- 关于海马处理分析系统上线通知
- JSF FacesContext详解
- activiti 流程定义和流程实例的挂起
- Dom解析复杂的Xml(另:getElementsByClassname()和getChildNodes()的应用)
- 安装搭建android studio教程图解
- matlab调用gpu进行矩阵运算
- POJ Tautology
- 怎么用API网关构建微服务
- 再读 第二篇 面向过程的程序设计3
- 主键约束和唯一性约束的区别
- MySql常用语句加编码细则.
- Arduino Uno 和 DHT11/DHT22 温湿度传感器