XML文档的DOM解析

xml的DOM解析:

<?xml version="1.0" encoding="UTF-8"?>
<books> <!--根节点--><!--这里的空白也算一个节点,所以books共有5个子节点-->
	<book id="book1" w="wwwww">
		<name><a>AAAAAA</a>bookName1</name>
		<price>10.0</price>
	</book>
	<book id="book2">
		<name>bookName2</name>
		<author>bookAuthor2</author>
	</book>
</books>

这张图片才是精髓:

代码:

package com.zhang.xml.dom;

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.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DomParse {

	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  
        DocumentBuilder builder = factory.newDocumentBuilder();  
        Document document = builder.parse("books.xml");  //获得文档对象
        Element element = document.getDocumentElement(); //获得根节点
        
        NodeList books = element.getElementsByTagName("book"); //得到所有book节点,2个
//      element.getChildNodes(); //得到所有子节点,5个

        System.out.println("共有" + books.getLength() + "书");
        
        for(int i=0; i<books.getLength(); i++) {
        	System.out.println("-----------------第" + (i+1) + "个节点开始解析-----------------");
        	Node bookNode = books.item(i); //得到第i个子节点
        
        	NamedNodeMap attrs = bookNode.getAttributes(); //得到节点的所有属性节点
        	System.out.println("---第"+ (i + 1) +"本书共有" + attrs.getLength() + "个属性节点---");
        	for(int j=0; j<attrs.getLength(); j++) {
        		Node attr = attrs.item(j); //得到第j个属性节点
        		String attrName = attr.getNodeName(); //节点名
        		String attrValue = attr.getNodeValue(); //节点值
        		System.out.println("------属性名:" + attrName + "-->属性值:" + attrValue + "------");
        	}
        	//如果知道book节点有且只有一个w属性节点
//        	Element ele = (Element)bookNode;
//        	System.out.println(ele.getAttribute("w"));
        
        	NodeList bookChildren = bookNode.getChildNodes(); //得到所有子节点
        	System.out.println("---第" + (i + 1) + "个节点共有" + bookChildren.getLength() +"个子节点---");
        	for(int k=0; k<bookChildren.getLength(); k++) {
        		if(bookChildren.item(k).getNodeType() ==Node.ELEMENT_NODE) {//元素节点
        			Node bookChild = bookChildren.item(k);
        			String nodeName = bookChild.getNodeName();
        			String textContent = bookChild.getTextContent(); 
//        			System.out.println(bookChild.getNodeValue()); //null
//        			System.out.println(bookChild.getFirstChild().getNodeValue()); // textContent
        			System.out.println("------第" + (k + 1) + "节点的节点名:" + nodeName + "-->节点值:" + textContent + "------");
        		}
        	}
        
        	System.out.println("-----------------第" + (i+1) + "节点结束解析-----------------");
        	System.out.println();
        }

	}

}

结果:

时间: 2024-11-04 07:39:08

XML文档的DOM解析的相关文章

使用JAXP对XML文档进行DOM解析

一.XML解析方式分为两种:dom和sax dom:(Document Object Model,即文档对象模型)是W3C组织推荐的解析XML的一种方式. sax:(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析器都支持它. dom和sax解析方法的区别: dom:对文档CRUD(增删改查)比较方便,缺点:占用内存比较大(将xml文件全部读入内存). sax:占用内存较少,解析速度快(从上往下读一行解析一行).缺点:只适合读取,不适合CRU

javaweb学习总结十一(JAX对XML文档进行DOM解析)

一:将内存中写好的xml文件读取到硬盘上 二:DOM方式对xml文件进行增删改查 1:添加节点(默认是在最后的子节点后面添加) 1 @Test 2 // 向元素中添加节点<version>1.0</version> 3 public void test5() throws Exception { 4 Document doc = getDoc(); 5 Node node = doc.getElementsByTagName("book").item(0); 6

javaweb学习总结十二(JAXP对XML文档进行SAX解析)

一:JAXP使用SAX方式解析XML文件 1:dom解析与sax解析异同点 2:sax解析特点 二:代码案例 1:xml文件 1 <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 <students> 3 <student> 4 <name sid="111">李四</name> 5 <age>

源生API解析XML文档与dom4j解析XML文档

一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可以存储数据. 1.XML语言书写的注意事项 1.XML标签命名自定义[推荐英文],标签名中不能包含空格 2.XML空格和换行都表示数据,严格区分大小写 3.XML中特殊字符表示的数据需要使用特殊字符编码和HTML一样 4.CDATA区中的数据不会被识别为语法 <![CDATA[王天霸<>&l

XML文档的SAX解析

xml文件: <?xml version="1.0" encoding="UTF-8"?> <books> <!--根节点--><!--这里的空白也算一个节点,所以books共有5个子节点--> <book id="book1" w="wwwww"> <name><a>AAAAAA</a>bookName1</name>

使用Dom4j对XML文档创建与解析

创建XML文件: public class Dom4jCreateXml { public void testCreatXml() { //创建文档对象 Document document = DocumentHelper.createDocument(); //创建跟节点 Element root = document.addElement("students"); //根据根节点创建子节点 Element stu01 = root.addElement("student&

org.w3c.dom(java dom)解析XML文档

位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的 API:1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 2.解析器:DocumentBuilder 创建方法:通过解析器工厂类来获得 DocumentBu

dom4j 解析 XML文档截录

dom4j 是一种解析 XML 文档的开放源代码 XML 框架.本文介绍如何使用包含在 dom4j 中的解析器创建并修改 XML 文档. dom4j API 包含一个解析 XML 文档的工具.本文中将使用这个解析器创建一个示例 XML 文档.清单 1 显示了这个示例 XML 文档,catalog.xml. 清单 1. 示例 XML 文档(catalog.xml) <?xml version="1.0" encoding="UTF-8"?> <cat

PHP中利用DOM创建xml文档

DOM创建xml文档 用dom创建如下文档: <booklist> <book id="1"> <title>天龙八部</title> <author>金庸</author> <content> <![CDATA[ 天龙八部是金庸写的一本武侠小说,非常好看! ]]> </content> </book> </booklist> 实现步骤:1.创建DOM对象