使用JAXP进行XM解析(基于DOM)

最近在做微信开发需要各种解析各种xml,基本用JAXP 解析的

JAXP 开发包是J2SE的一部分,它由javax.xml、org.w3c.dom 、org.xml.sax 包及其子包组成。

在 javax.xml.parsers 包中,定义了几个工厂类,通过调用这些工厂类,可以得到对xml文档进行解析的 DOM 或 SAX 的解析器对象。

javax.xml.parsers 包中的DocumentBuilderFactory用于创建DOM模式的解析器对象 , DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法 ,这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回。

1.调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

2.调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。
DocumentBuilder builder = factory.newDocumentBuilder();

3.调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进行可以利用DOM特性对整个XML文档进行操作了

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

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;

/*
 * xml格式的解析
 */
public class XmlParser {

	/**
	 * xml文件中的数据转换我Map<String,Object>中的数据
	 *
	 * @param xml
	 *            xml格式的字符串
	 * @return
	 * @throws ParserConfigurationException
	 * @throws IOException
	 * @throws SAXException
	 */
	public static Map<String, Object> getMapFromXML(String xml)
			throws ParserConfigurationException, IOException, SAXException {

		// 这里用Dom的方式解析回包的最主要目的是防止API新增回包字段
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		InputStream is = HttpRequestUtil.getStringStream(xml);//
		Document document = builder.parse(is);
		// 获取到document里面的全部结点
		NodeList allNodes = document.getFirstChild().getChildNodes();
		Node node;
		Map<String, Object> map = new HashMap<String, Object>();
		int i = 0;
		while (i < allNodes.getLength()) {
			node = allNodes.item(i);
			if (node instanceof Element) {
				map.put(node.getNodeName(), node.getTextContent());
			}
			i++;
		}
		return map;
	}
}

 

	/**
	 * 将字符串转换为输入流
	 *
	 * @param sInputString
	 *            待转换为输入流的字符串
	 * @return
	 */
	public static InputStream getStringStream(String sInputString) {
		ByteArrayInputStream tInputStringStream = null;
		if (sInputString != null && !sInputString.trim().equals("")) {
			try {
				tInputStringStream = new ByteArrayInputStream(sInputString.getBytes("UTF-8"));
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		}
		return tInputStringStream;
	}

 注:直接用sInputString.getBytes() 会出现 1 字节的 UTF-8 序列的字节 1 无效 此类问题

时间: 2024-11-09 01:06:44

使用JAXP进行XM解析(基于DOM)的相关文章

使用JAXP进行sax解析

1 package cn.liuning.sax; 2 3 import javax.xml.parsers.SAXParser; 4 import javax.xml.parsers.SAXParserFactory; 5 6 import org.xml.sax.Attributes; 7 import org.xml.sax.ContentHandler; 8 import org.xml.sax.Locator; 9 import org.xml.sax.SAXException; 10

利用JAXP和DOM4J解析XML

前言 原创文章欢迎转载,请保留出处. 若有任何疑问建议,欢迎回复. 邮箱:[email protected] 解析XML主要有两种思想,一种是SAX(Simple API for XML),另一种是DOM(文档对象模型),其中在J2EE中,提供了JAXP来实现这两种解析,本文主要利用JAXP实现SAX解析,同时介绍时下流行的DOM4J实现DOM解析. SAX解析和DOM解析比较 SAX解析 优点:效率高,当遇到大的XML文件时,不需要扫描完文件就可以操作. 缺点:不能进行RUD操作,每次操作都要

Atitit 基于dom的游戏引擎

1. 添加sprite控件(cocos,createjs,dom)1 1.1.1. Cocos1 1.1.2. createjs1 1.1.3. Dom模式2 1.2. 动画移动的实现原理2 1.3. 动画移动(cocos2d-js,jquery animate,create.js)2 1.4. ---code3 1. 添加sprite控件(cocos,createjs,dom) 1.1.1. Cocos // var sushi = new cc.Sprite(res.Sushi_png);

XML文件解析之--DOM与SAX

xml文件又称‘可扩展性标记语言’,可以对文档和数据进行结构化处理,从而能够在部门.客户和供应商之间进行交换,实现动态内容生成,企业集成和应用开发. 我们在进行web开发的时候离不开xml文件,xml文件无处不在,这次就烂讨论一下xml常用的解析方法及其CRUD操作,欢迎大家交流指正. 我们先来看看两种解析方式的过程,比较一下他们的优劣之处. SAX解析方式:它对xml文档进行逐行扫描,一边扫描一边解析.当扫描到文档(document)开始与结束.元素(element)开始与结束.文档(docu

jsoup解析HTML DOM

使用jsoup 解析HTML ,使用与JS操作DOM类似. 实例代码: import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class ParserHtml { public static void main(String[] args

XML解析之DOM ,SAX解析区别

环境配置:导入GDataXMLNode.h 文件 1.导入GDataXMLNode.h 文件时,需要导入动态库 libxml2.2.tbd 动态库 , 2.再在Build setting下面找到 Header Search Paths ,插入 /usr/include/libxml2 3. 最后在Build Phases中的Compile Sources 下找到GDataXMLNode.m文件,在后面加上 -fno-objc-arc  因为这个三方是MRC环境的 SAX解析和DOM解析的区别:

基于dom的xss漏洞原理

原文:http://www.anying.org/thread-36-1-1.html转载必须注明原文地址 最近看到网络上很多人都在说XSS我就借着暗影这个平台发表下自己对这一块的一些认识.其实对于XSS很多人都知道利用但是很多人都忽略了漏洞存在的原因,其实说白了基于dom中的XSS都是一些api代码审计不严所产生的,那么一下我就整理下可能存在基于dom的XSS攻击的api吧.document.locationdocument.URLdocument.URLUnencodeddocument.r

Android Xml解析之DOM详细攻略

参考地址:http://wenku.baidu.com/view/aca83d12cc7931b765ce15d1.html 由于dom方式是保存于内存中,比较耗内存,不过对于一些数据量比较小但又比较常用的隐秘信息,可以用此方法 People类是自己写的一个类,主要保存各个字符串数据. 1.为了具有扩展性 自己编了一个xml文件: <?xml version="1.0" encoding="utf-8"?> <peoples> <peo

Java---XML的解析(1)-DOM解析

本章只讲DOM解析.接下来还会学习Dom4j和StAX 解析技术 DOM解析: DOM解析一次将所有的元素全部加载到内存中:如有以下XML文档: <user> <name>Jack</name> <age>30</age> </user> 由于DOM解析,一次性的将所有元素(包含属性和文本) 全部加载到内存中,所以不适用于解析大量的数据. JAXP-DOM解析: 包: javax.xml.parse – 关键类DocumentBuil