我现在又一个xml文件格式如下:<?xml version=\"1.0\" encoding=\"GB2312\" ?> " +
    <returnInfo version=\"1.0\">" +
      <items>" +
      <item name=\"agentid\" value=\"1111\" /> " +
      <item name=\"orderid\" value=\"23333\" /> " +
      <item name=\"tranid\" value=\"444\" /> " +
      <item name=\"resultno\" value=\"888\" />" +
      <item name=\"chargeamt\" value=\"50\" />" +
      <item name=\"\" value=\"备注|ERROR0001\" />" +
      <item name=\"sing\" value=\"\" />" +
      </items>" +
   </returnInfo>"我现在需要将的内容读取出来,并保存到hashmap中去,name的值为key ,value的值为value,请问我应该怎么做?谢谢各位

解决方案 »

  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.   

    感觉还是dom4j比较简单一点,我帮你写了一下,注意需要添加dom4j的jar包到工程的Lib下,代码如下:
    package bean;import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    String xmlStr = "<?xml version=\"1.0\" encoding=\"GB2312\" ?> "
    + "<returnInfo version=\"1.0\">" + "<items>"
    + "<item name=\"agentid\" value=\"1111\" /> "
    + "<item name=\"orderid\" value=\"23333\" /> "
    + "<item name=\"tranid\" value=\"444\" /> "
    + "<item name=\"resultno\" value=\"888\" />"
    + "<item name=\"chargeamt\" value=\"50\" />"
    + "<item name=\"\" value=\"备注|ERROR0001\" />"
    + "<item name=\"sing\" value=\"\" />" + "</items>"
    + "</returnInfo>";
    Document document = null;
    Element root = null;
    List<Element> items = null;
    Map<String,String> result = new HashMap<String,String>();
    try {
    //根据xml字符串生成document对象
    document = DocumentHelper.parseText(xmlStr);
    //获取根节点returnInfo
    root = document.getRootElement();
    //获取returnInfo->items下的子类列表
    items = root.element("items").elements("item");
    //遍历列表,并将节点对应的名称和值放入map中
    for (Element item : items) {
    result.put(item.attributeValue("name"),
    item.attributeValue("value"));
    }
    //测试map中存入的值
    for(Iterator<String> it=result.keySet().iterator();it.hasNext();){
    String key=it.next();
    System.out.println("key"+key+";value="+result.get(key));
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }}