public class DOMTest{
public static void main(String[] args) throws Exception{
//第一步:创建解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
//第二步:File
File file = new File("stud.xml");
//第三步:file give to parser
Document document = db.parse(file);
//第四步:
NodeList nodeList = document.getElementsByTagName("student");
Node node = nodeList.item(1);
NamedNodeMap map = node.getAttributes();
//循环遍历
// for (int i = 0; i < map.getLength(); i++) {
// Attr attr = (Attr) map.item(i);
// System.out.println(attr.getName() + "<<<<<<" + attr.getValue());
// }
//直接取值
Attr attr = (Attr) map.getNamedItem("ID");
System.out.println(attr.getValue());
Node nameNode = node.getFirstChild();
//两种方式:取节点里面的值
//方式一:封装了方式二
String str = nameNode.getTextContent();
System.out.println(str);
//方式二:最基本
Node textNode = nameNode.getFirstChild();
String str = textNode.getNodeValue();
System.out.println("<<<<<<" + str);
//---------------------------------------------------------------
DOMTest t = new DOMTest();
List<Student> list = t.parse(document);
for (Student s : list) {
System.out.println(s.getId() + "\t" + s.getName() + "\t" + s.getBirth());
}
//---------------------------------------------------------------
Element e2 = document.getDocumentElement();
t.parse2(e2);
//---------------------------------------------------------------
Element e3 =document.getDocumentElement();
t.parse3(e3);
List<Student> list =t.getResult();
for(Student s:list){
System.out.println(s.getId()+"\t"+s.getName()+"\t"+s.getBirth()+"\t");
}
}
/**
*有限次数的循环,如果很多层的话,要嵌套太多的for循环
*/
public List<Student> parse(Document document) throws Exception {
List<Student> list = new ArrayList<Student>();
NodeList nodeList = document.getElementsByTagName("student");
for (int i = 0; i < nodeList.getLength(); i++) {
Node studentNode = nodeList.item(i);
Student s = new Student();
NamedNodeMap map = studentNode.getAttributes();
Attr attr = (Attr) map.getNamedItem("ID");
s.setId(Long.parseLong(attr.getValue()));
NodeList nodeList2 = studentNode.getChildNodes();
for (int j = 0; j < nodeList2.getLength(); j++) {
Node node = nodeList2.item(j);
if ("name".equals(node.getNodeName())) {
String str = node.getTextContent();
s.setName(str);
}
if ("birth".equals(node.getNodeName())) {
String str = node.getTextContent();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
s.setBirth(sdf.parse(str));
}
}
list.add(s);
}
return list;
}
/**
* 通过递归的方法遍历所有节点及其值,其属性
* @param e
*/
public void parse2(Element e){
System.out.println("节点的名字"+e.getNodeName());
if(e.hasAttributes()){
NamedNodeMap map =e.getAttributes();
for(int i=0;i<map.getLength();i++){
Attr attr =(Attr) map.item(i);
System.out.println("属性的名字是:"+attr.getName()+"属性的值:"+attr.getValue());
}
}
NodeList nodeList =e.getChildNodes();
for(int j=0;j<nodeList.getLength();j++){
Node node = nodeList.item(j);
if(node.getNodeType()==Node.ELEMENT_NODE){
parse2((Element)node);
}
if(node.getNodeType()==Node.TEXT_NODE){
String str = node.getNodeValue().trim();
if(str!=null&&str.length()>0){
System.out.println(str);
}
}
}
}
/**
*用递归方式把xml值装载到Student对象中
*/
private List<Student> list;
private String flag;
private Student s;
public void parse3(Element el) throws ParseException {
if ("students".equals(el.getNodeName())) {
list = new ArrayList<Student>();
}
if ("student".equals(el.getNodeName())) {
s = new Student();
NamedNodeMap map = el.getAttributes();
Attr attr = (Attr) map.getNamedItem("ID");
s.setId(Long.parseLong(attr.getValue()));
list.add(s);
}
if ("name".equals(el.getNodeName())) {
flag = "name";
}
if ("birth".equals(el.getNodeName())) {
flag = "birth";
}
NodeList nodeList = el.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
parse3((Element) node);
}
if (node.getNodeType() == Node.TEXT_NODE) {
String str = node.getNodeValue().trim();
if (str != null && str.length() > 0 && "name".equals(flag))
s.setName(str);
if (str != null && str.length() > 0 && "birth".equals(flag)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
s.setBirth(sdf.parse(str));
}
}
//
}
}
public List<Student> getResult() {
return this.list;
}
}
分享到:
相关推荐
DOM解析是一种基于树型结构的XML解析方法。当一个XML文档被DOM解析器加载时,整个文档会被转化为一棵内存中的对象树,称为DOM树。每个XML元素、属性、文本节点等都被映射为树中的一个对象。例如,给定的XML示例: `...
DOM解析方式允许开发者一次性加载整个XML文档到内存中,形成一个树形结构,便于遍历和操作。尽管对于大型XML文件,DOM解析可能因消耗大量内存而效率低下,但在处理小型XML文件时,DOM方法具有简洁和方便的优点。 ...
DOM解析器将整个XML文档加载到内存中,形成一个树形结构,允许开发者通过节点操作来访问和修改XML内容。本篇文章将深入探讨Android中的DOM解析XML文件,包括其基本原理、实现步骤和一些实用技巧。 ### 1. DOM解析的...
在这个例子中,我们将深入探讨如何使用DOM解析XML文件,以理解和掌握XML文档的结构,并进行数据提取、修改和创建。 首先,XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据,具有自描述性和...
在给定的标题“DOM解析器 动态修改当前页面”中,核心概念是利用DOM解析器来对网页进行实时的分析与修改。 DOM解析器的工作原理是将网页内容解析成一个树形结构,称为DOM树,每个节点代表了HTML元素、属性、文本或...
本篇文章将深入探讨DOM解析XML文件在Android中的应用实例。 首先,DOM解析的基本思想是将整个XML文件加载到内存中,形成一个树形结构,即DOM树。这样做的优点是解析后的数据可以方便地进行任意位置的查找和修改,但...
Java DOM 解析 XML 实例 Java DOM 解析 XML 实例是 Java 语言中常用的 XML 解析方法之一,使用 W3C 推荐的文档对象模型(Document Object Model,DOM)来解析 XML 文档。DOM 提供了一个树形结构的对象模型,通过...
本教程“DOM解析XML应用实例(入门经典案例)”旨在帮助初学者快速掌握DOM解析XML的基本方法和实践技巧。 XML(Extensible Markup Language)是一种标记语言,常用于存储和传输数据,特别是在Web应用程序中。它具有...
在C#中,XML DOM解析器主要通过`System.Xml`命名空间中的类来实现,如`XmlDocument`、`XmlNode`等。下面我们将深入探讨这些知识点: 1. **XMLDocument类**:这是DOM解析的核心,它代表整个XML文档。你可以使用`Xml...
标题“java_dom解析xml xml java”表明了本文档的主题是关于如何使用Java中的DOM技术来解析XML文件。 #### 描述分析 描述中提到这是一个适合新手入门的内容,并给出了一个简单的XML示例。该XML文档包含了一个`...
在PHP中,DOM(Document Object Model)是一种标准的解析XML和HTML文档的接口,它允许开发者以树形结构处理文档内容。PHP的DOM扩展提供了一系列的类和函数,用于创建、遍历和修改DOM对象。在给定的“php dom 解析类...
在Java平台上,DOM解析器提供了对XML文档的全面和结构化的访问。 使用DOM解析XML的基本步骤如下: 1. **导入必要的库**:在Java中,DOM解析功能主要由`javax.xml.parsers`和`org.w3c.dom`包提供。因此,首先需要在...
在.NET框架中,使用HtmlAgilityPack这个开源库可以方便地对HTML进行DOM解析。HtmlAgilityPack是一个强大的工具,能够处理不规范的HTML,它提供了灵活的DOM模型,使得开发者可以轻松地遍历、修改或提取HTML文档中的...
下面我们将深入探讨DOM解析XML以及如何创建XML。 DOM解析XML的过程分为以下几个步骤: 1. **加载XML文档**:首先,我们需要通过DOM解析器加载XML文档。在JavaScript中,可以使用`DOMParser`对象的`parseFromString...
在处理XML文件时,DOM解析器会将整个XML文档加载到内存中,形成一个完整的节点树,这样我们就可以通过这个树来查找、修改或遍历XML数据。 XML(eXtensible Markup Language)是一种标记语言,常用于存储和传输结构...
DOM解析是处理XML文档的一种常见方法,它将整个XML文件加载到内存中,形成一个树形结构,允许开发者通过节点遍历和操作XML内容。在iOS中,我们可以使用Apple提供的`NSXMLParser`类来实现DOM解析。 首先,我们需要...
ppt中详细介绍了DOM解析器的使用及其应用
以一个实例来说明DOM解析XML文件的方法与过程。
### Java中使用DOM解析XML详解 #### 一、引言 在Java开发中,解析XML是一种常见的需求。XML(Extensible Markup Language,可扩展标记语言)作为一种数据存储和传输的标准格式,在不同系统间的数据交换中扮演着...