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文件。 首先,我们需要了解XMLDOM的主要组成部分。XMLDOM主要包括以下几个核心接口: 1. **Document对象**:这是整个XML文档的根节点,代表整个XML...
示例源码: ...什么是 XML DOM? XML DOM 是: 用于 XML 的标准对象模型 用于 XML 的标准编程接口 中立于平台和语言 W3C 标准 XML DOM 定义了所有 XML 元素...5、XMLDOM教程文档推荐参考:https://www.w3cschool.cn/xmldom
DOM解析方式允许开发者一次性加载整个XML文档到内存中,形成一个树形结构,便于遍历和操作。尽管对于大型XML文件,DOM解析可能因消耗大量内存而效率低下,但在处理小型XML文件时,DOM方法具有简洁和方便的优点。 ...
DOM解析器会一次性加载整个XML文档到内存,因此适用于小型或中型XML文件,对于大型文件可能会消耗大量内存。 1. **DOM解析XML的基本步骤** - **导入库**:首先,在Android项目中,我们需要导入处理XML的Java API,...
在本示例中,我们将探讨如何利用DOM4J来读取和解析XML文件,以及如何通过`XMLTest.java`这个示例来理解DOM4J的基本用法。 首先,`XMLTest.java`是一个包含DOM4J操作XML的代码实例。通常,这样的程序会包含以下步骤...
总结,IE下的XML DOM解析涉及使用ActiveXObject创建DOM对象,加载XML文件,然后通过DOM API遍历和操作XML结构。在ASP.NET Web环境中,通常需要结合服务器端和客户端代码协同工作,确保数据的正确传输和解析。理解并...
### Java DOM 解析 XML 在Java中,DOM(Document...上述示例代码展示了如何使用DOM解析器加载XML文件,并从中提取所需的信息。对于初学者来说,这是一个很好的起点,可以帮助理解DOM的基本用法以及如何与XML数据交互。
标题中的"DOM_XML.rar"可能是一个包含DOM解析XML相关示例的压缩文件,"DOM_dom xml_dom xml java_dom解析xml_java解析xml"这部分描述了文件的主要内容,即关于DOM(Document Object Model)在XML解析中的应用,特别...
DOM解析器会将整个XML文档加载到内存中,形成一棵树形结构,允许用户遍历和操作每个节点。而SAX解析器则是事件驱动的,逐个处理XML元素,适合处理大型XML文件,因为它不需要一次性加载整个文档。 在"Parse XML"这...
下面是一个使用 DOM 解析 XML 文档的示例代码: ```java import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import javax.xml....
DOM解析器将整个XML文件加载到内存中,构建一个树形结构,可以方便地通过节点操作访问XML数据。优点是操作灵活,适合小到中等大小的XML文档;缺点是如果XML文件过大,可能导致内存消耗过高。 3. **Pull解析器** ...
- 编程复杂度:DOM解析提供了直接访问和操作XML的简单接口,而SAX解析则需要编写事件处理器代码。 综上所述,DOM和SAX解析各有优劣,适用于不同的场景。在实际开发中,应根据项目需求和资源限制来选择合适的解析...
在Java中,`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`类可用于实现DOM解析。 2. SAX(Simple API for XML)解析: SAX是一种事件驱动的解析方法,不将整个XML文档加载到内存,而是逐行...
### Oracle使用XMLDOM包保存XML节点数据到数据库表中的实践 #### 一、背景与需求分析 在实际项目开发过程中,经常会遇到与第三方系统交互的需求。这些第三方接口往往返回的数据格式为XML。为了方便后续处理及存储...
它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。本篇将详细讲解DOM4J解析XML的基本用法以及API文档中的关键概念。 首先,让我们了解XML(Extensible Markup Language)。XML是一种标记语言,...
下面是一个简单的代码示例,展示了如何使用DOM4解析XML文件: ```java import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import java.io.File; public class XMLParser { public ...
- 以下是一个简单的JavaScript DOM解析示例: ```javascript var xhr = new XMLHttpRequest(); xhr.open('GET', 'data.xml', true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr....
在提供的`DomXmlOperate`示例中,可能包含了如何使用DOM解析XML并绑定到View(如使用ButterKnife库)的代码。 2. PULL解析: PULL解析器是事件驱动的,它以拉取(pull)的方式逐个处理XML元素,不需要一次性加载...
以下是一个简单的Android DOM解析XML的代码示例: ```java try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); // 从...
DOM 将XML文档解析成一个树形结构,每个组成部分都称为一个节点。理解XML DOM对于有效地处理XML至关重要。 XML DOM 简介: XML DOM 提供了一种平台和语言中立的接口,允许开发者通过编程方式访问和修改XML文档的...