xml文件--DOM方式解析xml
2017-11-28 11:41
369 查看
知识简述
1.在Java程序中读取xml文件的过程也称为–解析xml文件2.解析的目的:获取节点名、节点值、属性名、属性值
3.四种解析方式:DOM、SAX、DOM4J、JDOM前两种是官方提供的不必导jar包
要读取的xml文件
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book id="1"> <name>冰与活之歌</name> <author>乔治马丁</author> <year>2014</year> <price>89</price> </book> <book id="2"> <name>安徒生童话</name> <year>2014</year> <price>77</price> <language>English</language> </book> <book></book> </bookstore>
java代码
package anqi.test; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /* * 创建一个DocumentBuilderFactory的对象 * 创建一个DocumentBuilder的对象 * 通过DocumentBuilder对象的parse(String fileName)方法解析xml文件 * */ public class DOMTest { public static void main(String[] args) { //创建一个DocumentBuilderFactory的对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try{ //创建一个DocumentBuilder的对象 DocumentBuilder db = dbf.newDocumentBuilder(); //public Document parse(File f) //public Document parse(String uri) //通过DocumentBuilder对象的parse方法加载xml文件到当前项目下 Document document = db.parse("books.xml"); //获取所有book节点的集合 NodeList booklist = document.getElementsByTagName("book"); //遍历每一个book节点 for (int i =0; i < booklist.getLength(); i++){ System.out.println("------------下面开始遍历第"+(i+1)+"本书-------------"); //通过NodeList的item方法,获取一个节点 Node book = booklist.item(i); //getAttributes()获取book节点下所有属性的集合 NamedNodeMap attrs = book.getAttributes(); //遍历book的每一个节点 for (int h = 0; h < attrs.getLength(); h++){ //通过item方法获取某一个属性 Node attr = attrs.item(h); //获取属性名 System.out.print("属性名:"+attr.getNodeName()+"\t"); //获取属性值 System.out.println("属性值:"+attr.getNodeValue()); } NodeList childNodes = book.getChildNodes(); //遍历childNodes获取每个节点的节点名和节点值 System.out.println("第"+(i+1)+"本书共有"+childNodes.getLength()+"子节点"); for (int j = 0; j < childNodes.getLength(); j++){ //区分出text类型的node以及element类型的node if (childNodes.item(j).getNodeType() == Node.ELEMENT_NODE){ //获取了element类型节点的节点名 System.out.print("第"+(j+1)+"个节点的节点名:"+childNodes.item(j).getNodeName()); //获取了element类型的节点值 // System.out.println("--节点值是"+childNodes.item(j).getFirstChild().getNodeValue()); // 这两种方式都可以,但是如果该节点下还包含节点,第一种显示为null第二种把此节点和下一节点文字都输出 // System.out.println("--节点值是"+childNodes.item(j).getTextContent()); } } /* //前提:已经知道book节点有且只能有一个id属性,知道名字和个数 //将book及诶单进行强制类型转换,转换成Element类型 Element element = (Element) booklist.item(i); //通过getAttribute("id")方法获取属性值 String value = element.getAttribute("id"); System.out.println("id的属性值是:"+value); 4000 */ System.out.println("------------下面开始遍历第"+(i+1)+"本书-------------"); } }catch(Exception e){} } }
显示结果
------------下面开始遍历第1本书------------- 属性名:id 属性值:1 第1本书共有9子节点 第2个节点的节点名:name--节点值是冰与活之歌 第4个节点的节点名:author--节点值是乔治马丁 第6个节点的节点名:year--节点值是2014 第8个节点的节点名:price--节点值是89 ------------下面开始遍历第1本书------------- ------------下面开始遍历第2本书------------- 属性名:id 属性值:2 第2本书共有9子节点 第2个节点的节点名:name--节点值是安徒生童话 第4个节点的节点名:year--节点值是2014 第6个节点的节点名:price--节点值是77 第8个节点的节点名:language--节点值是English ------------下面开始遍历第2本书------------- ------------下面开始遍历第3本书------------- 第3本书共有0子节点 ------------下面开始遍历第3本书-------------
【注意事项】
1.如果xml文件改为这样<name><a>aa</a>冰与活之歌</name>
System.out.println("--节点值是"+childNodes.item(j).getTextContent());
第2个节点的节点名:name--节点值是aa冰与活之歌
System.out.println("--节点值是"+childNodes.item(j).getFirstChild().getNodeValue());
第2个节点的节点名:name--节点值是null
2.DOM读取整个文档进内存,
childNodes.item(j).getNodeType() == Node.ELEMENT_NODE
这一句很关键,否则将会把回车也输出
相关文章推荐
- XML文件解析(DOM方式)
- DOM方式解析XML配置文件
- 【慕课笔记】2-1 应用DOM方式解析XML—如何进行 XML 文件解析前的准备工作
- java 解析dom 树方式来解析XML文件
- QT读写XML文件之DOM方式解析XML
- android中解析XML文件方式—DOM SAX PULL
- DOM方式解析XML配置文件,将数据保存成数组
- 【慕课笔记】2-3 应用DOM方式解析XML—使用 DOM 解析XML 文件的节点名和节点值
- 三种方式解析XML(DOM,Pull,Sax,并带文件编码识别).........................by 私念
- Java眼中的XML--文件读取--1 应用DOM方式解析XML
- Android学习笔记42:XML文件解析(DOM方式)
- mybatis 解析配置文件(一)之XML的DOM解析方式
- Java之xml文件解析一(DOM方式解析xml文件)
- DOM方式解析XML配置文件,将数据保存成数组
- 用“XML解析开发包Jaxp”对XML文件进行Dom方式的CRUD操作
- python 解析xml 文件: DOM 方式
- xml文件解析—DOM方式
- DOM 解析XML文件
- android解析XML总结(SAX、Pull、Dom三种方式)
- XML以及XML解析方式[DOM+SAX]