浅谈用java解析xml文档
Posted 狼牙曼巴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈用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规则。在需要平衡时使用。
以上是关于浅谈用java解析xml文档的主要内容,如果未能解决你的问题,请参考以下文章