浅谈用java解析xml文档(三)

时间:2023-03-08 15:14:32
浅谈用java解析xml文档(三)

    接上一篇,本文介绍使用JDOM解析xml文档,

    首先我们还是应该知道JDOM从何而来,是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初,

    JDOM作为一个开放源代码项目正式开始研发。JDOM是一种解析XML的Java工具包。

    JDOM基于树状结构,利用纯JAVA技术对XML文档实现解析、生成、序列化及其它操作。

    我们从以下步骤开始解析:

    (1)、通过JDOM的API创建一个SAXBuilder的对象

      SAXBuilder saxBuilder = new SAXBuilder();

    (2)、创建一个输入流,将xml文件加载到输入流中

      InputStream in = new FileInputStream("src/res/books.xml");

    (3)、通过saxBuilder  的builder()方法,将输入流加载到saxBuilder 中,返回一个Document对象的一个引用,

      Document document = saxBuilder.build(in );

然后我们通过document对象获取xml的根节点。

      Element rootElement = document.getRootElement();

      接下来我们就对xml 的子节点进行操作,获取根节点下子节点list集合。

      List<Element> bookList = rootElement.getChildren();

      遍历集合 bookList,获取子节点的名称和子节点的值,

      

for (Element book : bookList) {
List<Attribute> attrList = book.getAttributes();
for (Attribute attr : attrList) {
// 获取属性名
String attrName = attr.getName();
// 获取属性值
String attrValue = attr.getValue();
System.out.println("属性名:" + attrName + "----属性值:"
+ attrValue);
}
// 对book节点的子节点的节点名以及节点值的遍历
List<Element> bookChilds = book.getChildren();
for (Element child : bookChilds) {
System.out.println("节点名:" + child.getName() + "----节点值:"
+ child.getValue()); } }

     以下是books.xml

      

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>老人与海</name>
<author>海明威</author>
<year>1955</year>
<price>45</price>
</book>
<book id="2">
<name>书剑恩仇录</name>
<year>1959</year>
<price>24</price>
<language>chinese</language>
</book>
</bookstore>

输出的结果为:

  

属性名:id----属性值:1
节点名:name----节点值:老人与海
节点名:author----节点值:海明威
节点名:year----节点值:1955
节点名:price----节点值:45
属性名:id----属性值:2
节点名:name----节点值:书剑恩仇录
节点名:year----节点值:1959
节点名:price----节点值:24
节点名:language----节点值:chinese

这样我们最简单的JDOM解析xml文件就完成了,总结一个JDOM的优缺点。

  优点:   ①是基于树的处理XML的Java API,把树加载在内存中
         ②没有向下兼容的限制,因此比DOM简单
         ③速度快,缺陷少
         ④具有SAX的JAVA规则
   缺点:    
①不能处理大于内存的文档
         ②JDOM表示XML文档逻辑模型。不能保证每个字节真正变换。
         ③针对实例文档不提供DTD与模式的任何实际模型。
         ④不支持与DOM中相应遍历包
    最适合于:JDOM具有树的便利,也有SAX的JAVA规则。在需要平衡时使用。