如何解析String类型的如下格式的XML。。。。在线等!

传入String类型 解析XML 获得MAP 或者hasttable在线等图片说明

http://blog.csdn.net/lwphk/article/details/49150759 这个文章可以帮到你

http://blog.csdn.net/lwphk/article/details/49150759 这个文章可以帮到你

加我QQ916976682,我跟你说,前段时间刚弄完

不管什么类型,直接用dom4j解析文件,解析出来的键值对保存在map中

建议 dom4j 解析,里面封装了很多类和方法 直接调用比较方便!

如果你需要解析整个xml,建议使用jaxb,jdk6以后,已经是内部api了,可以方便使用了。不需要引入任何jar了。
如果你只是提取里边个别信息,建议使用dom4j,用xpath直接定位,很方便。

jaxb,以row为例:

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="row")
public class Row {
    private List<Col> cols;

    @XmlElement(name="col")
    public List<Col> getCols() {
        return cols;
    }

    public void setCols(List<Col> cols) {
        this.cols = cols;
    }

    public static void main(String[] args) {
        Row row=new Row();
        List<Col> list=new ArrayList<Col>();
        Col col=new Col();
        col.setContent("70734d9");
        col.setName("messageid");
        list.add(col);

        col=new Col();
        col.setContent("1");
        col.setName("messagetype");
        list.add(col);

        row.setCols(list);;
        try {  
            JAXBContext context = JAXBContext.newInstance(Row.class);  
            Marshaller marshal = context.createMarshaller();  
            marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
            marshal.marshal(row, System.out);  

        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }
}

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;

@XmlType
public class Col {
    private String name;

    private String content;
    @XmlAttribute
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @XmlValue
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }

}

执行结果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<row>
    <col name="messageid">70734d9</col>
    <col name="messagetype">1</col>
</row>

同样,解析使用Unmarshaller,写这段解析,分分钟的事,用annotation很快。

dom4j:

使用xpath需要jaxen jar,以前面的xml为例:

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;


public class Dom4jDemo {

    public static void main(String[] args) throws DocumentException {
        Document document=new SAXReader().read("demo.xml");
        Element rootElement = document.getRootElement();
        Node node = rootElement.selectSingleNode("//row/col[@name=\"messageid\"]");
        System.out.println(node.getText());
    }

}

结果:

70734d9

xpath说明
/ 绝对路径
// 模糊查询,从任意匹配到的节点开始,本例改为单/也是可以的。
[] 增加匹配条件,@name=\"messageid\"表示只匹配name属性=messageid的节点。

其他细节几句话说不清楚,自己查查,按照例子写下就ok