xml解析之dom解析
来源:互联网 发布:经纬度换算坐标软件 编辑:程序博客网 时间:2024/05/29 18:59
上节大概了解了xml,这节我们来对xml进行解析,前面说了,xml能保存数据和数据之间的结构,当我们用这些数据时,需要对他们进行解析,xml解析也是比较常见的一种业务需求,需要掌握
dom解析
1) dom解析 在内存中形成一个dom树 优点: dom树在内存中,速度快 缺点: 在解析大文档的时候,消耗大量内存2)DOM解析XML文件步骤 创建解析器工厂对象 解析器工厂对象创建解析器对象 解析器对象指定XML文件创建Document对象 以Document对象为起点操作DOM树
这是案例中用到的xml文件:<?xml version="1.0" encoding="UTF-8"?><bookstore> <book category="children"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="web"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> <book category="web"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book></bookstore>package xml;import java.io.File;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;public class DomParser { public static void main(String[] args) throws Exception { // step 1:获得DOM解析器工厂 // 工厂的作用是创建具体的解析器 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // step 2:获得具体的dom解析器 DocumentBuilder db = dbf.newDocumentBuilder(); // step 3:解析一个xml文档,获得Document对象(根节点) // 此文档放在项目目录下即可 Document document = db.parse(new File("resource/Demo1.xml")); // 根据标签名访问节点 NodeList list = document.getElementsByTagName("book"); System.out.println("list length: " + list.getLength()); // 遍历每一个节点 for (int i = 0; i < list.getLength(); ++i) { System.out.println("----------------------"); // 获得元素,将节点强制转换为元素 Element element = (Element) list.item(i); // 此时element就是一个具体的元素 // 获取子元素:子元素title只有一个节点,之后通过getNodeValue方法获取节点的值 String content0 = element.getElementsByTagName("title").item(0) .getNodeValue(); System.out.println(content0);// 此处打印出为null // 因为节点getNodeValue的值永远为null // 解决方法:加上getFirstChild() String content = element.getElementsByTagName("title").item(0) .getFirstChild().getNodeValue(); System.out.println("title: " + content);// 此处打印出书名 // 后面类似处理即可: content = element.getElementsByTagName("author").item(0) .getFirstChild().getNodeValue(); System.out.println("author: " + content); content = element.getElementsByTagName("year").item(0) .getFirstChild().getNodeValue(); System.out.println("year: " + content); content = element.getElementsByTagName("price").item(0) .getFirstChild().getNodeValue(); System.out.println("price: " + content); } }}
第二个dom解析xml的例子
package xml;import java.io.File;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class Domparser2 { /** * 上一个例子是我从别人博客上copy下来的,博客地址我放在文末,有兴趣可以看看 * 这个例子我自己来,看能不能写出来吧,毕竟好久没用了。。。 * 唉,学而时习之。。。 * @param args * @throws ParserConfigurationException * @throws IOException * @throws SAXException */ public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { //1.创建工厂 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //2.获取解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //3.解析xml文档,获取文档模型 Document document=builder.parse(new File("resource/Demo1.xml")); //4.执行操作 NodeList list=document.getElementsByTagName("book"); //5.遍历 /** * <book category="children"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> */ System.out.println("有"+list.getLength()+"本书"); for (int i = 0; i < list.getLength(); i++) { System.out.println("-------------------"); //6.获取每一个书节点 Node node=list.item(i); //7.获取书节点的所有子节点 NodeList childlist=node.getChildNodes(); for (int j = 0; j < childlist.getLength(); j++) { Node childNode =childlist.item(j); String name=childNode.getNodeName(); //可以看到结果,不过这里有个问题,getnodeName貌似每次第一个得到的是#Text 很奇怪,先放着,完了回头看 String value=childNode.getTextContent(); System.out.println(name+":"+value); } } }}
代码中的第一个案例取自这个博客,如有侵权,联系修改
阅读全文
0 0
- XML解析之DOM解析
- XML解析之DOM解析
- xml解析之----DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- XML解析之DOM解析
- xml解析之dom解析
- 解析xml之--DOM
- xml解析之Dom
- XML解析之 DOM
- XML解析之Dom
- XML解析之DOM
- tomcat端口冲突
- virtualbox虚拟机下 Win7开启 host-only
- Java日期类
- QT模拟鼠标事件
- java入门之面向对象4
- xml解析之dom解析
- MYSQL
- shell脚本实现自动保留最近n次备份记录
- [HAOI2006]受欢迎的牛 Tarjan缩点
- windows下创建ftp服务
- Sqoop将MySQL中数据导入到Hive表中
- box-shadow在ios下没有显示
- Android驱动入门-Led控制+app+ndk库+底层驱动
- 10G 个整数,乱序排列,要求找出中位数,内存限制为 2G