//xml文档 testDOM.xml
<?xml version="1.0" encoding="gb2312"?>
<students>
<student id="1" name="张三">
<age>18</age>
<sex>男</sex>
</student>
<student id="2" name="里司">
<age>16</age>
<sex>女</sex>
</student>
<student id="3" name="王五">
<age>19</age>
<sex>男</sex>
</student>
</students>
//src源文件
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.jdom.input.SAXBuilder;
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;
/**
* 功能:
* @author yaos email: yaos@isoftstone-ai.com
* @date 2008 11 25
*/
public class TestParseDOM {
/**
* 功能:
* @param args
*/
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
DocumentBuilder db = domfac.newDocumentBuilder();
Document doc = db.parse(new File("src/testDOM.xml"));//装载.xml文件 路径在default package下
Element root = doc.getDocumentElement();//获得根元素
NodeList nodelist = root.getChildNodes();//获得根元素下面的 所有节点的list集合
List list = new ArrayList();//存放解析后的结果
if(nodelist!=null){
for(int i=0;i<nodelist.getLength();i++){//遍历节点list集合
Node node = nodelist.item(i);//获得第i个节点
if(node.getNodeType()==Node.ELEMENT_NODE){
// Method 1.如果知道这一级有多少个attribute但是不知道attribute的名字
String id = node.getAttributes().item(0).getNodeName();
String idValue = node.getAttributes().item(0).getNodeValue();
String name = node.getAttributes().item(1).getNodeName();
String nameValue = node.getAttributes().item(1).getNodeValue();
Map map = new HashMap();
map.put(id, idValue);
map.put(name, nameValue);
list.add(map);
// Method 2.如果知道这一级有多少个attribute并且知道attribute的名字
// String id = node.getAttributes().getNamedItem("id").getNodeName();
// String idValue = node.getAttributes().getNamedItem("id").getNodeValue();
// String name = node.getAttributes().getNamedItem("name").getNodeName();
// String nameValue = node.getAttributes().getNamedItem("name").getNodeValue();
// Map map = new HashMap();
// map.put(id, idValue);
// map.put(name, nameValue);
// list.add(map);
// Method 3.如果不知道这一级有多少个attribute并且不知道attribute的名字
// NamedNodeMap nodeMap = node.getAttributes();
// for(int j = 0 ; j < nodeMap.getLength();j++){
// String key = nodeMap.item(j).getNodeName();
// String value = nodeMap.item(j).getNodeValue();
// Map keyValueMap = new HashMap();
// keyValueMap.put(key, value);
// list.add(keyValueMap);
// }
for(Node child=node.getFirstChild();child!=null;child=child.getNextSibling()){//遍利当前节点下的节点,(指向第一个节点;如果节点不为空;节点指向下一个兄弟节点)
if(child.getNodeType()==Node.ELEMENT_NODE){//如果节点是 节点类型
String childName = child.getNodeName();//获得的节点的名字(age或是sex)
String childValue = child.getFirstChild().getNodeValue();//获得节点的值(注意使用的是 第一个孩子节点的value而不是直接取value,即age或sex对应的值)
// String childValue = child.getTextContent();//使用此方法获得的与上面相同的效果,具体使用不明确
// 如果age和sex节点里面还有attrbitue的话可以使用以下方式编历
// <student id="1" name="张三">
// <age a="A">18</age>
// <sex b="B">男</sex>
// </student>
// String tempName = child.getAttributes().item(0).getNodeName();
// String tempValue = child.getAttributes().item(0).getNodeValue();
// System.out.println(tempName+"___"+tempValue);
Map map1 = new HashMap();
map1.put(childName, childValue);
list.add(map1);
}
}
}
}
}
for(int i = 0 ; i < list.size() ; i ++){
Map map = (Map) list.get(i);
for(Object obj : map.keySet()){
System.out.println(obj.toString()+"-->"+map.get(obj));
}
}
}
}
分享到:
相关推荐
Java解析XML数据主要涉及到的是对XML文档的读取和处理,SAX(Simple API for XML)解析器是一种基于事件驱动的解析方式,适用于处理大型XML文件。与DOM(Document Object Model)解析器不同,SAX不需要一次性加载...
Java解析XML数据的方式主要有DOM、SAX、JDOM和DOM4J这四种。每种方法都有其特定的优势和适用场景。 1. DOM解析 DOM(Document Object Model)解析是将XML文档转换为一棵对象树,这棵树被称为DOM树。DOM树的每个节点...
Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:...
### Java解析XML字符串 在给定的代码示例中,我们看到了如何使用JDOM库来解析一个XML字符串,并对其进行操作。下面我们将详细解析这个过程: 1. **初始化XML源**:首先,将XML字符串转化为`StringReader`对象,这...
本教程将介绍如何使用Java解析XML文件,并将解析结果导入MySQL数据库。 首先,我们需要引入处理XML的Java库——JAXB(Java Architecture for XML Binding)和DOM(Document Object Model)API。JAXB用于对象与XML...
Java解析XML文件是Java开发中常见的一项任务,XML(eXtensible Markup Language)作为一种结构化数据存储格式,被广泛用于数据交换、配置文件和Web服务等场景。本篇文章将详细探讨Java如何利用DOM4J库来解析XML文件...
总结起来,实现“java解析xml动态生成树形菜单结构”的项目,需要掌握以下核心知识点: 1. Java的DOM解析XML,构建树形数据结构。 2. 设计和实现无限层级的树形菜单数据模型。 3. 使用`JSTree`库在前端渲染树形菜单...
### Java解析XML的四种方式详解 #### 一、DOM(Document Object Model) DOM是一种平台和语言中立的接口,它将XML文档表示为一个树结构,使得程序可以创建、读取、更新或删除树中的元素。DOM实现了W3C的标准,能够...
本文将深入探讨几种不同的XML解析方法,并通过实际的“Java解析XML性能对比分析Demo”来展示它们的性能差异。我们将讨论DOM、SAX、JDOM、DOM4J和JAXB这五种解析器,以及它们各自的特点和适用场景。 1. DOM(文档...
理解并掌握这些解析方法对于Java开发者来说非常重要,特别是当需要处理XML数据时。无论是在Web服务、配置文件还是数据交换场景中,XML解析都是一个关键的技能。你可以根据实际需求选择适合的解析方式。在实际项目中...
掌握Java解析XML的不同方法,将极大地提升处理XML数据的能力,为构建更加强大、灵活的软件系统打下坚实的基础。无论是处理小规模的数据还是大规模的文档流,Java都提供了丰富的工具和API,确保开发者能够高效地完成...
在Java编程环境中,XML(可...总的来说,Java解析XML生成JSON对象的能力使得数据在不同平台和应用间无缝交换成为可能。通过学习和使用这样的工具类,开发者可以更高效地处理XML数据,并将其集成到基于JSON的系统中。
本篇将详细介绍如何使用Java解析XML,将数据存入MongoDB,并返回org.json JSON包。 首先,解析XML通常有两种主要方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM一次性加载整个XML文档到内存...
在Java编程语言中,XML(eXtensible Markup Language)是一种广泛应用的数据...总之,了解和掌握这些XML解析方法对Java开发者来说至关重要,能够帮助他们在处理XML数据时做出明智的选择,以适应不同的性能和功能需求。
Java解析XML的四种经典方法是XML处理中常用的技术,它们分别是DOM、SAX、StAX和JDOM。每种方法都有其独特的特性和适用场景,下面将详细介绍这四种方法。 1. DOM(Document Object Model)解析: DOM是W3C制定的一种...
总的来说,“Java解析XML.zip”提供的这两个库为Java开发者提供了强大的XML处理能力,使他们能够在Java应用程序中方便地解析、操作和查询XML数据。通过学习和掌握DOM4J和JAXEN,开发者可以更高效地处理XML任务,提升...
在Java编程环境中,XML...总的来说,Java解析XML的库提供了强大的功能,使开发者能够高效地处理XML数据。dom4j和jdom是其中的两个重要选项,通过它们,你可以轻松地实现XML的读取、创建、修改以及查询等一系列操作。
Java 实现 XML 解析 Word 文档代码实现 基于给定的文件信息,我们可以总结出以下知识点: 1. Java 实现 XML 解析 Word 文档 Java 可以使用多种方式来解析 Word 文档,包括使用 Apache POI 库、Java2Word 库等。...
JAXB 提供了一种将XML数据自动转换为Java对象,以及将Java对象转换为XML数据的方式。这种方式非常适合于对象和XML之间的双向绑定。在Java中,可以使用`javax.xml.bind.JAXBContext`和`javax.xml.bind.Marshaller`、`...