`
sunnidy
  • 浏览: 55860 次
  • 性别: Icon_minigender_1
  • 来自: 常德
文章分类
社区版块
存档分类
最新评论

java解析xml数据

阅读更多

//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数据---sax解析器

    Java解析XML数据主要涉及到的是对XML文档的读取和处理,SAX(Simple API for XML)解析器是一种基于事件驱动的解析方式,适用于处理大型XML文件。与DOM(Document Object Model)解析器不同,SAX不需要一次性加载...

    Java 解析XML数据的4种方式

    Java解析XML数据的方式主要有DOM、SAX、JDOM和DOM4J这四种。每种方法都有其特定的优势和适用场景。 1. DOM解析 DOM(Document Object Model)解析是将XML文档转换为一棵对象树,这棵树被称为DOM树。DOM树的每个节点...

    java 解析xml 多级

    Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:...

    java解析xml字符串

    ### Java解析XML字符串 在给定的代码示例中,我们看到了如何使用JDOM库来解析一个XML字符串,并对其进行操作。下面我们将详细解析这个过程: 1. **初始化XML源**:首先,将XML字符串转化为`StringReader`对象,这...

    使用java解析XML文件,解析完之后将解析结果导入mysql数据库中

    本教程将介绍如何使用Java解析XML文件,并将解析结果导入MySQL数据库。 首先,我们需要引入处理XML的Java库——JAXB(Java Architecture for XML Binding)和DOM(Document Object Model)API。JAXB用于对象与XML...

    java解析XML文件

    Java解析XML文件是Java开发中常见的一项任务,XML(eXtensible Markup Language)作为一种结构化数据存储格式,被广泛用于数据交换、配置文件和Web服务等场景。本篇文章将详细探讨Java如何利用DOM4J库来解析XML文件...

    java解析xml动态生成树形菜单结构

    总结起来,实现“java解析xml动态生成树形菜单结构”的项目,需要掌握以下核心知识点: 1. Java的DOM解析XML,构建树形数据结构。 2. 设计和实现无限层级的树形菜单数据模型。 3. 使用`JSTree`库在前端渲染树形菜单...

    java解析XML的四种方式

    ### Java解析XML的四种方式详解 #### 一、DOM(Document Object Model) DOM是一种平台和语言中立的接口,它将XML文档表示为一个树结构,使得程序可以创建、读取、更新或删除树中的元素。DOM实现了W3C的标准,能够...

    java 解析XML性能对比分析Demo

    本文将深入探讨几种不同的XML解析方法,并通过实际的“Java解析XML性能对比分析Demo”来展示它们的性能差异。我们将讨论DOM、SAX、JDOM、DOM4J和JAXB这五种解析器,以及它们各自的特点和适用场景。 1. DOM(文档...

    java解析xml例子

    理解并掌握这些解析方法对于Java开发者来说非常重要,特别是当需要处理XML数据时。无论是在Web服务、配置文件还是数据交换场景中,XML解析都是一个关键的技能。你可以根据实际需求选择适合的解析方式。在实际项目中...

    java解析XML详解

    掌握Java解析XML的不同方法,将极大地提升处理XML数据的能力,为构建更加强大、灵活的软件系统打下坚实的基础。无论是处理小规模的数据还是大规模的文档流,Java都提供了丰富的工具和API,确保开发者能够高效地完成...

    java解析xml生成json对象

    在Java编程环境中,XML(可...总的来说,Java解析XML生成JSON对象的能力使得数据在不同平台和应用间无缝交换成为可能。通过学习和使用这样的工具类,开发者可以更高效地处理XML数据,并将其集成到基于JSON的系统中。

    Java 解析xml 存入mongodb 返回org.json json包

    本篇将详细介绍如何使用Java解析XML,将数据存入MongoDB,并返回org.json JSON包。 首先,解析XML通常有两种主要方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM一次性加载整个XML文档到内存...

    JAVA解析XML示例

    在Java编程语言中,XML(eXtensible Markup Language)是一种广泛应用的数据...总之,了解和掌握这些XML解析方法对Java开发者来说至关重要,能够帮助他们在处理XML数据时做出明智的选择,以适应不同的性能和功能需求。

    java解析xml的四种经典方法

    Java解析XML的四种经典方法是XML处理中常用的技术,它们分别是DOM、SAX、StAX和JDOM。每种方法都有其独特的特性和适用场景,下面将详细介绍这四种方法。 1. DOM(Document Object Model)解析: DOM是W3C制定的一种...

    Java解析XML.zip

    总的来说,“Java解析XML.zip”提供的这两个库为Java开发者提供了强大的XML处理能力,使他们能够在Java应用程序中方便地解析、操作和查询XML数据。通过学习和掌握DOM4J和JAXEN,开发者可以更高效地处理XML任务,提升...

    Java解析xml所需jar包

    在Java编程环境中,XML...总的来说,Java解析XML的库提供了强大的功能,使开发者能够高效地处理XML数据。dom4j和jdom是其中的两个重要选项,通过它们,你可以轻松地实现XML的读取、创建、修改以及查询等一系列操作。

    java实现xml解析word文档代码实现

    Java 实现 XML 解析 Word 文档代码实现 基于给定的文件信息,我们可以总结出以下知识点: 1. Java 实现 XML 解析 Word 文档 Java 可以使用多种方式来解析 Word 文档,包括使用 Apache POI 库、Java2Word 库等。...

    详 解Java解析XML

    JAXB 提供了一种将XML数据自动转换为Java对象,以及将Java对象转换为XML数据的方式。这种方式非常适合于对象和XML之间的双向绑定。在Java中,可以使用`javax.xml.bind.JAXBContext`和`javax.xml.bind.Marshaller`、`...

Global site tag (gtag.js) - Google Analytics