传入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