我想问一下我通过网络接收一堆XML信息,我存到了String当中我想吧这个XML信息存入到数据中....有什么样的解析会比较容易啊????例如:<csdn type="name">
<name first="c" last="sdn"/>
<name first="i" last="ndex" />
</csdn>
这样的固定格式我想解析用什么比较好啊.,.....大鸟给介绍一下吧...
<name first="c" last="sdn"/>
<name first="i" last="ndex" />
</csdn>
这样的固定格式我想解析用什么比较好啊.,.....大鸟给介绍一下吧...
解决方案 »
- jboss7 发布ssh2 项目, 用spring 做事务管理
- 搞糊涂了,List Map 的问题,求大神直接上代码什么的,需求内详
- 100分求Java EE项目源码
- 关于如何抓取以product_id=XXXX结尾的所有url地址 60分我的所有身家
- 高手帮忙解决下 着急 !!!!!!!!!!
- java.lang.IllegalArgumentException: object is not an instance of declaring class
- 请教高手有关J2EE开发的问题
- 留下还是走?
- 谁知道是怎么回事
- spring-mybatis 报错
- JDK1.5和1.6的区别 求解!
- java问题
package com.parxml;import org.jdom.*;
import org.jdom.input.*;
import java.io.*;
import java.util.*;/**
* <p>
* Description:本类实现对XML的解析操作
* </p>
* <p>
* Copyright: Copyright (c) 2007
* </p>
* <p>
* Company:QC
* </p>
*
* @version v1.0
*/public class ParserXML {public ParserXML(){
//构造函数
}/**
* 解析XML到HashMap
*
* @param xml
* String:传入的XML
* @param map
* HashMap:解析后的MAP
* @return HashMap
* @throws JDOMException
* @throws IOException
*/public HashMap XMLToMap(String xml,HashMap<String,String> map) throws JDOMException, IOException {
if(map==null){
map = new HashMap<String, String>();
}
InputStream in = new ByteArrayInputStream(xml.getBytes("gb2312"));
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(in);
Element root = doc.getRootElement();
boolean tag = elementToMap(root.getChildren(),map);
if(!tag){
map.clear();
}
return map;
}/**
* 把XML的内容的节点取出,转换成 Name = Value (键值对)的形式
*/
private boolean elementToMap(List list, HashMap<String, String> map) {
for (int i = 0; i < list.size(); i++) {
Element emt = (Element) list.get(i);
if (emt.getTextTrim() != null && emt.getTextTrim().length() > 0) {
map.put(emt.getName(), emt.getTextTrim());
}
List listChildern = emt.getChildren();
if (listChildern.size() > 0) {
elementToMap(listChildern, map);
}
}
return true;
}/**
* 转换XML属性值到HashMap
*
* @param xml
* String:传入的XML
* @param map
* HashMap:解析后的MAP
* @return HashMap
* @throws JDOMException
* @throws IOException
*/
public HashMap xmlAttributeToMap(String xml , HashMap<String,String> map) throws JDOMException, IOException{
if(map==null){
map = new HashMap<String, String>();
}
InputStream in = new ByteArrayInputStream(xml.getBytes("gb2312"));
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(in);
Element root = doc.getRootElement();
boolean tag = attributeElementToMap(root.getChildren(),map);
if(!tag){
map.clear();
}
return map;
}
/**
* 把XML的内容节点取出,转换成 ParentName.SelfName = Value 的形式
*/
public boolean attributeElementToMap(List list , HashMap<String, String> map){
for (int i = 0; i < list.size(); i++) {
Element e = (Element) list.get(i);
List l_att = e.getAttributes();
for (int t = 0; t < l_att.size(); t++) {
Attribute attribute = (Attribute) l_att.get(t);
String name = attribute.getName();
String value = attribute.getValue();
map.put(name, value);// 属性
}
java.util.List listChildern = e.getChildren();
if (listChildern.size() > 0) {
attributeElementToMap(listChildern, map);
}
}
return true;
}
}
package bean;import java.util.List;import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;public class Test {
public static void main(String[] args) {
// 从xml字符串
String xmlStr = "<?xml version=\"1.0\" encoding=\"GB2312\" ?> "
+"<csdn type=\"name\">"+
"<name first=\"c\" last=\"sdn\"/>"+
"<name first=\"i\" last=\"ndex\" />"+
"</csdn>";
Document document=null;
try {
//根据获得xml字符串生成document对象
document=DocumentHelper.parseText(xmlStr);
//获取根节点csdn
Element csdn=document.getRootElement();
//获取csdn下的name节点列表
List<Element> names=csdn.elements("name");
//遍历list取出每个节点name的属性
for(Element name:names){
System.out.println("first="+name.attributeValue("first")+";last="+name.attributeValue("last"));
}
} catch (Exception e) {
e.printStackTrace();
}
}}
Document 解析比较占用内存 使用于小型xml
pull 解析 比较繁琐 所以官方推荐SAX 解析 解析一般情况下 知道你的结构
用你的例子 给你分析下
<csdn type="name">
<name first="c" last="sdn"/>
<name first="i" last="ndex" />
</csdn>
<csdn type="name">
<name first="c" last="sdn">12131313</name>
<name first="i" last="ndex">456464654</name>
</csdn>
一般情况下xml 就是常见的两种写法 所以你要知道什么时候调用什么方法 就行了 如果不知道什么时候调用什么方法的话 那就证明你还没有理解 究竟怎么解析 只有你真正的理解了 解析xml 非常简单