目前我所见过的XMl文档的解析方式已经不少了,但是用的很少, 因为我只是在学习,如果仔细的记住每一步, 脑细胞有点不够用,个人感觉,既然是解析XML文档,肯定要根据XML文档的结构来办,不同解析方式的方法虽不同,但目的是一样的。
1)DOM4J
DOM4J是一套非常优秀的Java XMLAPI。使用它可以创建XML文档,也可以解析XML文档。
它在解析XMl文档时,会把XML文档封装成Document对象,装载进内存。
a,获取文档对象:
SAXReader reader = new SAXReader();
Document document = reader.read(url);
//or
Document document = DocumentHelper.parseText( "<root> <child id='1'>James</child> </root>");
b,快速遍历:
Element root = document.getRootElement();
// iterate through child elements of root
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
// do something
}
// iterate through child elements of root with element name "foo"
for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
Element foo = (Element) i.next();
// do something
}
// iterate through attributes of root
for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
// do something
}
c,使用xPath快速定位文档数据:
List list = document.selectNodes( "//foo/bar" ); //选择所有父亲是foo的bar元素
Node node = document.selectSingleNode( "//foo/bar/author" );
String name = node.valueOf( "@name" ) //选择元素的name属性
//
public void findLinks(Document document) throws DocumentException {
List list = document.selectNodes( "//a/@href" );
for (Iterator iter = list.iterator(); iter.hasNext(); ) {
Attribute attribute = (Attribute) iter.next();
String url = attribute.getValue();
}
}