我想问一下我通过网络接收一堆XML信息,我存到了String当中我想吧这个XML信息存入到数据中....有什么样的解析会比较容易啊????例如:<csdn type="name">
<name first="c" last="sdn"/>
<name first="i" last="ndex" />
</csdn>
这样的固定格式我想解析用什么比较好啊.,.....大鸟给介绍一下吧...

解决方案 »

  1.   

    jdom自行下载:
    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;
    }
      

  2.   

    这种东西没有例如哪一个 XML 的话,只能根据 XML 的结构进行分析和设计。
      

  3.   

    dom4j的jar包自己下载,放到工程的lib下,代码如下:
    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();
    }
    }}
      

  4.   

        SAX 解析  用这个啊    这个效率比较高 适用于大型的xml  占用内存少,
        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 非常简单