JDOM解析XML文件
JDOM 简化了与XML的交互并且比使用DOM实现更快,JDOM 与DOM主要有两方面不同,JDOM使用具体的类而不使用接口,这在某些方面简化了API,但是降低了灵活性
在使用时倒入相应的jar包。
具体步骤:
1:实例化一个合适的解析器:
SAXBuilder builder = new SAXBuilder();
2:以包含XML数据的文件为参数,构建一个文档对象
Document doc =builder.build(Thread.currentThread().getContextClassLoader().getResourceAsStream("com/xiyou/Person.xml"));
3:获取根元素:
Element root = doc.getRootElement();
获取到根元素后,就可以很方便的对它的子元素进行操作了,如下为一些常用的方法
getChild("childname") 返回指定名字的子节点,如果同一级有多个同名子节点,则只返回第一个;如果没有返回null值。
getChildren("childname") 返回指定名字的子节点List集合。这样你就可以遍历所有的同一级同名子节点。
getAttributeValue("name") 返回指定属性名字的值。如果没有该属性则返回null,有该属性但是值为空,则返回空字符串。
getChildText("childname") 返回指定子节点的内容文本值。
getText() 返回该元素的内容文本值。
实例如下:
Xml文件与上一篇中的相同,
创建一个Person类,属性包含xml文件中的各个属性 此处省略(生成Seter ,Geter 方法 构造方法,toString方法等)
public class JDOMDemo {
public static void main(String[] args) {
List<Person> list=parseJOMxml();
System.out.println(list);
}
private static List <Person> parseJOMxml() {
List<Person> list = new ArrayList<Person>();
SAXBuilder builder = new SAXBuilder();
try {
Document doc =builder.build(Thread.currentThread().getContextClassLoader().getResourceAsStream("com/xiyou/Person.xml"));
Element root = doc.getRootElement(); //获取根结点
List <Element> es= root.getChildren();
for (int i = 0 ; i <es.size();i++){
Element e= es.get(i);
Person p = new Person();
p.setPersonid(e.getAttributeValue("personid"));
List <Element> presonNode =e.getChildren();
for (int j = 0 ;j< presonNode.size();j++){
Element node = presonNode.get(j);
String tag= node.getName(); // 获取标签的名字
if ("name".equals(tag)){
p.setName(node.getText());
}else if ("age".equals(tag)){
p.setAge(Integer.parseInt(node.getText()));
} else if ("sex".equals(tag)){
p.setSex(node.getText());
}else if ("tel".equals(tag)){
p.setTel(Long.parseLong(node.getText()));
}
}
list.add(p);
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
}
DOM4J解析XML 文件
Dom4j 是一个非常优秀的java XML API ,具有性能优异,功能强大和易用的特性,在对主流的java XML API 进行性能,功能和易用性能测评,dom4j无论在哪个方面都是出色的,目前很多的java软件都在使用dom4来读写XML
Xml文件与上一篇中的相同,
创建一个Person类,属性包含xml文件中的各个属性 此处省略(生成Seter ,Geter 方法 构造方法,toString方法等)
实例如下:
public class DOM4Juse {
public static void main(String[] args) {
List <Person> list=parseDOM4jXML();
System.out.println(list);
}
private static List<Person> parseDOM4jXML() {
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("com/xiyou/Person.xml");
/*SAXReader 相当于一个管道,用一个流的方式,把xml文件读出来
* SAXReader reader = new SAXReader();
* Document doc= reader.read(is);
*
*/
SAXReader reader = new SAXReader();
List <Person> list = new ArrayList<>();
try {
Document doc= reader.read(is);
Element root= doc.getRootElement();//获取根结点
Iterator<Element > iter = root.elementIterator();//获取根结点下的子节点。
while (iter.hasNext()){
Element e=iter.next();
Iterator<Element> i = e.elementIterator();
Person p = new Person();
p.setPersonid(e.attributeValue("personid"));
while (i.hasNext()){
Element el = i.next();
String tag = el.getName();
if ("name".equals(tag)){
p.setName(el.getText());
}else if ("age".equals(tag)) {
p.setAge(Integer.parseInt(el.getText()));
}else if ("sex".equals(tag)){
p.setSex(el.getText());
}else if ("tel".equals(tag)){
p.setTel(Long.parseLong(el.getText()));
}
}
list.add (p);
}
} catch (DocumentException e) {
e.printStackTrace();
}
return list;
}
}
使用X-Stream解析xml
xStream可以轻易的将Java对象和xml文档相互转换的工具,很好很强大,提供可所有的基础类型,数组,集合,等类型直接转换的支持,
X-Stream对象相当于java对象和XML之间的转换器,转换过程是双向的,创建X-stream对象也很简单直接new即可。
转换也很方便可 java-》xml 使用toXML();
XML -》java ()使用fromXML()方法
在使用的时候应该首先导入jar包
创建一个Person类,属性包含xml文件中的各个属性 此处省略(生成Seter ,Geter 方法 构造方法,toString方法等)
public class XstreamUse {
public static void main(String[] args) {
long num = 13993930987L;
Person p = new Person("1","杨根超",18,num,"man");
// 使用Xpp3作为解析器
XStream stream = new XStream(new Xpp3Driver());
stream.alias("person", Person.class);//取根标签别名
stream.useAttributeFor("personid",String.class );
String xml=stream.toXML(p);//将java对象转换为XML
System.out.println(xml);
Person Per= (Person)stream.fromXML(xml);//将XML转换为java对象
System.out.println(Per);
}
}
总结各种总结方式的比较:
JDOM 与DOM在性能测试时,性能表现不佳,SAX表现较好(者要依赖于其特定的解析方式)DOM4J 性能最好,目前许多开源项目中大量采用DOM4J。