xml文件--DOM方式解析xml
来源:互联网 发布:手机淘宝申请账号注册 编辑:程序博客网 时间:2024/05/21 18:32
知识简述
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); */ 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
这一句很关键,否则将会把回车也输出
阅读全文
0 0
- DOM方式解析XML文件
- xml文件--DOM方式解析xml
- Android DOM方式解析XML文件
- XML文件解析(DOM方式)
- Dom与Pull方式解析XML文件
- XML文件解析(DOM方式)
- 【JAXP】Dom方式解析XML文件
- DOM方式解析xml文件查看天气
- 通过Dom方式解析xml文件
- Java之DOM方式解析XML文件
- Java 应用DOM方式解析XML文件
- DOM方式进行XML文件解析
- Java中的xml文件dom方式解析
- XML文件解析(DOM方式)
- java解析XML文件(DOM方式)
- dom方式解析xml
- DOM方式解析XML
- DOM方式解析xml
- Eclipse 从SVN插件检出的maven项目都为文件夹
- JavaScript 动画之图片表格布局预览放大
- Android的ListView,数据更新后可以自动scroll到底部
- Java学习(2)-条件语句
- android自定义View之(四)------一键清除动画
- xml文件--DOM方式解析xml
- Android应用内在线查看PDF文件
- Eclipse中找到当前文件在硬盘中的位置
- ListView
- php调用类中属性和函数的常用方法->_=>_::_$this->
- eclipse调试debug时找不到源码source not found
- 严蔚敏版数据结构学习笔记(5):串
- Activiti(工作流)如何关联业务表
- android笔记:长按APP图标弹出快捷方式(shortcuts)