`

XML DOM解析简单示例

    博客分类:
  • XML
阅读更多
DOM编程不要其它的依赖包,因为JDK里自带的JDK里含有org.w3c.dom、org.xml.sax 和javax.xml.parsers包就可以满意条件了。
研究好这3个包,大部分的问题都可以解决了。
一个简单示例以及分析
xml内容
<?xml version="1.0" encoding="gb2312"?>
<books>
<book email="zhoujunhui">
<name>rjzjh</name>
<price>jjjjjj</price>
</book>
</books>
解析程序示例
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

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

public class DomParse {
	   public DomParse(){
	      DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
	      try {
	          DocumentBuilder dombuilder=domfac.newDocumentBuilder();
	          InputStream is=new FileInputStream("D://hyx/sid/src/xml/library.xml");
	          Document doc=dombuilder.parse(is);
	          Element root=doc.getDocumentElement();
	         NodeList books=root.getChildNodes();
	         if(books!=null){
	             for(int i=0;i<books.getLength();i++){
	                 Node book=books.item(i);
	                 if(book.getNodeType()==Node.ELEMENT_NODE){
	                     String email=book.getAttributes().getNamedItem("email").getNodeValue();
	                     System.out.println(email);
	                     for(Node node=book.getFirstChild();node!=null;node=node.getNextSibling()){
	                         if(node.getNodeType()==Node.ELEMENT_NODE){
	                             if(node.getNodeName().equals("name")){
	                                 String name=node.getNodeValue();
	                                 String name1=node.getFirstChild().getNodeValue();
	                                 System.out.println(name);
	                                 System.out.println(name1);
	                             }
	                             if(node.getNodeName().equals("price")){
	                                 String price=node.getFirstChild().getNodeValue();
	                                 System.out.println(price);
	                             }
	                         }
	                     }
	                 }
	             }
	       }
	   } catch (ParserConfigurationException e) {
		   e.printStackTrace();
	   } catch (FileNotFoundException e) {
		   e.printStackTrace();
	   } catch (SAXException e) {
		   e.printStackTrace();
	   } catch (IOException e) {
		   e.printStackTrace();
	     }
	   }
	   public static void main(String[] args) {
		          new DomParse();
		       }

		   
}

分析:一下(1)-(4)是解析的主要步骤,其他可以不看
(1)得到DOM解析器的工厂实例

DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
得到javax.xml.parsers.DocumentBuilderFactory;类的实例就是我们要的解析器工厂

(2)从DOM工厂获得DOM解析器

DocumentBuilder dombuilder=domfac.newDocumentBuilder();
通过javax.xml.parsers.DocumentBuilderFactory实例的静态方法newDocumentBuilder()得到DOM解析器

(3)把要解析的XML文档转化为输入流,以便DOM解析器解析它

InputStream is=new FileInputStream("bin/library.xml");
InputStream是一个接口。

(4)解析XML文档的输入流,得到一个Document

Document doc=dombuilder.parse(is);
由XML文档的输入流得到一个org.w3c.dom.Document对象,以后的处理都是对Document对象进行的

(5)得到XML文档的根节点

Element root=doc.getDocumentElement();
在DOM中只有根节点是一个org.w3c.dom.Element对象。

(6)得到节点的子节点

NodeList books=root.getChildNodes();
for(int i=0;i<books.getLength();i++){
Node book=books.item(i);
}
这是用一个org.w3c.dom.NodeList接口来存放它所有子节点的,还有一种轮循子节点的方法,后面有介绍

(7)取得节点的属性值

String email=book.getAttributes().getNamedItem("email").getNodeValue();
System.out.println(email);
注意,节点的属性也是它的子节点。它的节点类型也是Node.ELEMENT_NODE

(8)轮循子节点

for(Node node=book.getFirstChild();node!=null;node=node.getNextSibling()){
    if(node.getNodeType()==Node.ELEMENT_NODE){
        if(node.getNodeName().equals("name")){
            String name=node.getNodeValue();
            String name1=node.getFirstChild().getNodeValue();
            System.out.println(name);
            System.out.println(name1);
        }
    if(node.getNodeName().equals("price")){
        String price=node.getFirstChild().getNodeValue();
        System.out.println(price);
    }
}

这段代码的打印输出为:
null
alterrjzjh
jjjjjj
从上面可以看出
String name=node.getNodeValue();  是一个空值。而
String name1=node.getFirstChild().getNodeValue(); 才是真正的值,这是因为DOM把<name> rjzjh</name>也当作是两层结构的节点,其父节点为<name>节点本身,且它只有一个子节点(如果有属性的话就不止 一个了!),子节点是它的值“rjzjh”,所以我们看到上面的结果。
还有,子节点的节点类型也是Node.ELEMENT_NODE型的,node.getNextSibling()方法是取下一个相邻的节点。
分享到:
评论

相关推荐

    Asp xmldom解析XML

    在这个示例中,我们将深入探讨如何在ASP中使用XMLDOM对象解析XML文件。 首先,我们需要了解XMLDOM的主要组成部分。XMLDOM主要包括以下几个核心接口: 1. **Document对象**:这是整个XML文档的根节点,代表整个XML...

    易语言模块 XMLDOM 解析 构造 获取 更改 添加 删除 遍历元素 格式化XML

    示例源码: ...什么是 XML DOM? XML DOM 是: 用于 XML 的标准对象模型 用于 XML 的标准编程接口 中立于平台和语言 W3C 标准 XML DOM 定义了所有 XML 元素...5、XMLDOM教程文档推荐参考:https://www.w3cschool.cn/xmldom

    Android Dom解析XML

    DOM解析方式允许开发者一次性加载整个XML文档到内存中,形成一个树形结构,便于遍历和操作。尽管对于大型XML文件,DOM解析可能因消耗大量内存而效率低下,但在处理小型XML文件时,DOM方法具有简洁和方便的优点。 ...

    Dom方式解析XML

    DOM解析器会一次性加载整个XML文档到内存,因此适用于小型或中型XML文件,对于大型文件可能会消耗大量内存。 1. **DOM解析XML的基本步骤** - **导入库**:首先,在Android项目中,我们需要导入处理XML的Java API,...

    dom4j读取XML,解析XML简单示例

    在本示例中,我们将探讨如何利用DOM4J来读取和解析XML文件,以及如何通过`XMLTest.java`这个示例来理解DOM4J的基本用法。 首先,`XMLTest.java`是一个包含DOM4J操作XML的代码实例。通常,这样的程序会包含以下步骤...

    IE下使用XML DOM解析XML文件(ASP.NET Web)

    总结,IE下的XML DOM解析涉及使用ActiveXObject创建DOM对象,加载XML文件,然后通过DOM API遍历和操作XML结构。在ASP.NET Web环境中,通常需要结合服务器端和客户端代码协同工作,确保数据的正确传输和解析。理解并...

    java_dom解析xml xml java

    ### Java DOM 解析 XML 在Java中,DOM(Document...上述示例代码展示了如何使用DOM解析器加载XML文件,并从中提取所需的信息。对于初学者来说,这是一个很好的起点,可以帮助理解DOM的基本用法以及如何与XML数据交互。

    DOM_XML.rar_DOM_dom xml_dom xml java_dom解析xml_java解析xml

    标题中的"DOM_XML.rar"可能是一个包含DOM解析XML相关示例的压缩文件,"DOM_dom xml_dom xml java_dom解析xml_java解析xml"这部分描述了文件的主要内容,即关于DOM(Document Object Model)在XML解析中的应用,特别...

    XML解析器示例

    DOM解析器会将整个XML文档加载到内存中,形成一棵树形结构,允许用户遍历和操作每个节点。而SAX解析器则是事件驱动的,逐个处理XML元素,适合处理大型XML文件,因为它不需要一次性加载整个文档。 在"Parse XML"这...

    java dom 解析 xml 实例

    下面是一个使用 DOM 解析 XML 文档的示例代码: ```java import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import javax.xml....

    Android sax pull dom 文件解析 示例

    DOM解析器将整个XML文件加载到内存中,构建一个树形结构,可以方便地通过节点操作访问XML数据。优点是操作灵活,适合小到中等大小的XML文档;缺点是如果XML文件过大,可能导致内存消耗过高。 3. **Pull解析器** ...

    dom解析和sax解析

    - 编程复杂度:DOM解析提供了直接访问和操作XML的简单接口,而SAX解析则需要编写事件处理器代码。 综上所述,DOM和SAX解析各有优劣,适用于不同的场景。在实际开发中,应根据项目需求和资源限制来选择合适的解析...

    JAVA解析XML示例

    在Java中,`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`类可用于实现DOM解析。 2. SAX(Simple API for XML)解析: SAX是一种事件驱动的解析方法,不将整个XML文档加载到内存,而是逐行...

    oracle 使用XMLDOM包,保存XML节点数据到数据库表中,支持多个节点嵌套XML格式

    ### Oracle使用XMLDOM包保存XML节点数据到数据库表中的实践 #### 一、背景与需求分析 在实际项目开发过程中,经常会遇到与第三方系统交互的需求。这些第三方接口往往返回的数据格式为XML。为了方便后续处理及存储...

    DOM4J解析XML示例及API文档

    它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。本篇将详细讲解DOM4J解析XML的基本用法以及API文档中的关键概念。 首先,让我们了解XML(Extensible Markup Language)。XML是一种标记语言,...

    Dom4解析XML数据示例

    下面是一个简单的代码示例,展示了如何使用DOM4解析XML文件: ```java import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import java.io.File; public class XMLParser { public ...

    xmldom解析

    - 以下是一个简单的JavaScript DOM解析示例: ```javascript var xhr = new XMLHttpRequest(); xhr.open('GET', 'data.xml', true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr....

    Android XML解析(DOM、PULL、SAX三种方式)

    在提供的`DomXmlOperate`示例中,可能包含了如何使用DOM解析XML并绑定到View(如使用ButterKnife库)的代码。 2. PULL解析: PULL解析器是事件驱动的,它以拉取(pull)的方式逐个处理XML元素,不需要一次性加载...

    android上使用DOM解析XML

    以下是一个简单的Android DOM解析XML的代码示例: ```java try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); // 从...

    【学习 XML DOM】.pdf

    DOM 将XML文档解析成一个树形结构,每个组成部分都称为一个节点。理解XML DOM对于有效地处理XML至关重要。 XML DOM 简介: XML DOM 提供了一种平台和语言中立的接口,允许开发者通过编程方式访问和修改XML文档的...

Global site tag (gtag.js) - Google Analytics