DOM解析XML
2015-08-22 17:21
381 查看
DOM
DOM (Document Object Model,文档对象模型)定义了访问和操作文档的标准方法。 DOM 把 XML 文档作为树结构来查看。能够通过 DOM 树来访问所有元素。可以修改或删除它们的内容,并创建新的元素。元素,它们的文本,以及它们的属性,都被认为是节点。 软件包 org.w3c.dom为文档对象模型 (DOM) 提供接口,该模型是 Java API for XML Processing 的组件 API。
文档对象
Node接口 该 Node 接口是整个文档对象模型的主要数据类型,文档对象模型都继承了这个接口。它表示该文档树中的单个节点。 在解析XML文件时,注释,换行符、空格和TAB空白符号、元素、文本都是节点。 nodeName、nodeValue 和 attributes 作为一种获取节点信息的机制Interface | nodeName | nodeValue | attributes |
Element | 与 Element.tagName 相同 | null | NamedNodeMap |
Document | "#document" | null | null |
Text | "#text" | 与 CharacterData.data 相同,该文本节点的内容 | null |
Attr | 与 Attr.name 相同 | 与 Attr.value 相同 | null |
Comment | "#comment" | 与 CharacterData.data 相同,该注释的内容 | null |
String getTagName();//返回标记的名字 STring getTextContext();//返回当前阶段的所有Text子孙节点中的文本内容,包括空白符号(Tab、空格、换行等)。 String getAttribute(String name); NodeList getElementByTagName(String name);//返回一个NodeList对象,该对象由当前节点的子节点组成。 boolean hasAttribute(String name);
得到Document对象
导入相关支持类,JDK提供的以Document命名的类还是很多的,注意用的下面类就好import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList;
通过如下方式获得一个document对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); File file=new File("E://test.xml"); Document document=builder.parse(file);
遍历
我们要对test.xml文件遍历,首先从根节点开始,获取其子节点集合,然后对每个子节点的子节点进行遍历test.xml
<?xml version="10" encoding="UTF-8" ?> <列车时刻表> <T28> <开车时间>20点58分</开车时间> <终到时间>08点18分</终到时间> </T28> <T876> <开车时间>23点12分</开车时间> <终到时间>07点18分</终到时间> </T876> </列车时刻表>
遍历方法
public static void traverseXML(Document document){ Element root = document.getDocumentElement(); NodeList nodeList = root.getChildNodes();//返回一个NodeList对象,该对象由当前节点的子节点组成。 if (null != root) { //遍历子节点 for (int i = 0; i < nodeList.getLength(); i++) { Node child = nodeList.item(i); //过滤掉不需要的text节点,比如空白符号、注释等 if (child.getNodeType() == Node.ELEMENT_NODE) { String name = child.getNodeName(); System.out.println(name); //遍历孙子节点,与上面通过getChildNodes()来遍历不同,这种方式更方便 for (Node node = child.getFirstChild(); node != null; node = node.getNextSibling()) { if (node.getNodeType() == Node.ELEMENT_NODE) { //打印出节点的名字、此节点及其后代的文本内容。 System.out.println(node.getNodeName()+"\t"+node.getTextContent()); } } } } } }
遍历test.xml,结果如下
T28 开车时间 20点58分 终到时间 08点18分 T876 开车时间 23点12分 终到时间 07点18分
查找
查找方法public static void seek(String tagName, Document document) { Element root = document.getDocumentElement(); // 获取指定名字中的第一个Element对象 Node target = root.getElementsByTagName(tagName).item(0); for (Node node = target.getFirstChild(); null != node; node = node .getNextSibling()) { // 过滤掉不需要的text节点,比如空白符号、注释等 if (node.getNodeType() == Node.ELEMENT_NODE) { System.out.println(node.getNodeName()); System.out.println(node.getTextContent()); } } }
查找test.xml中tagName为T876的元素,结果为
T876 开车时间23点12分 终到时间07点18分
相关文章推荐
- O2O平台盈利模式有哪些
- SP800-53实现安全分级
- WebDriver使用IE和chrome浏览器
- 玛丽卡 (codevs p1021;洛谷p1186)
- 03.第一个OC程序
- 例说linux内核与应用数据通信(三):读写内核设备驱动文件
- SOA概念解惑
- stl_function.h
- 一个图形引擎的画面风格是由那些因素(技术)决定的?
- MAC的VIMRC
- MySQL必知必会(创建计算字段(field))
- Win7+Apache+PHP+MySQL配置
- Semi-prime H-numbers(筛法)
- 表达式求值 (计算器)
- 我关注的一周技术动态 2015.8.23
- Semi-prime H-numbers(筛法)
- 菜鸟学习之tomcat上传问题
- 静态链接和动态链接
- JVM内存分布
- PL/SQL Developer主界面窗口默认设置