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;
}
}

解析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。