XML 四、应用 DOM4J 及 JDOM 方式解析 XML

本文介绍如何使用JDOM和DOM4J两种工具解析XML文件,包括创建解析器对象、读取XML文档、获取节点信息及处理乱码等步骤,并展示了存储对象的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4-1 JDOM 开始解析前的准备工作

1.创建一个SAXBuilder对象

SAXBuilder saxbuilder=newSAXBuilder();

2.创建输入流,将xml文件加载到输入流中(抛出FileNotFoundException)

Inputstream in=new FileInputstream("xxx.xml");

3.通过SAXBuilder的Build方法将输入流加载到saxb中获取dom对象

Document doc = saxbuilder.build(in);

4.通过document对象获取xml文件的根结点

Element rootElement =doc.getRootElement();

5.获取根结点下的子节点的List集合

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

 

4-2 应用 JDOM 解析节点属性

//继续进行解析

for (Element book : bookList) {

 System.out.println("===开始解析第"+(bookList.indexOf(book)+1)+"本书===");

 //解析book的属性

 List<Attribute> attrList = book.getAttributes();

//    //知道节点下属性名称时,获取节点值

//    book.getAttributeValue("id");

 //遍历attrList(针对不清楚book节点下属性的名字和数量)

 for (Attribute attr : attrList) {

  //遍历属性名

  String attrName = attr.getName();

  //遍历属性值

  String attrValue = attr.getValue();

  System.out.println("属性名:"+attrName+"---属性值:"+attrValue);

 }

 System.out.println("===结束解析第"+(bookList.indexOf(book)+1)+"本书===");

}

 

4-3 应用 JDOM 解析子节点的名和值

  • JDOM中每个节点都有getchildren()方法

// 对book节点的子节点的节点名以及节点值的遍历

List<Element> bookChilds = book.getChildren();

for (Element child : bookChilds) {

System.out.println("节点名:" + child.getName() + "----节点值:" + child.getValue());

}

 

4-4  JDOM 解析时乱码的处理

1.修改xml第一行的encoding属性

2.在代码中处理,应用IO流知识

//创建输入流,将XML文件加载到输入流中

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

//使用包装流InputStreamReader进行读取编码的指定

InputStreamReader isr = new InputStreamReader(in,"UTF-8");

 

4-5 在 JDOM 中存储 Book 对象 

和之前的存储方式并无太大差异。

创建book对象ArrayList集合

添加节点属性值到book

if(attrName.equals("id")){
personEntity.setId(attrValue);
}

添加子节点属性值到book

if (child.getName().equals("name")) {
bookEntity.setName(child.getValue());
}

 

4-6 关于 JDOM 使用过程中 JAR 包的引用

1.通过右键项目,选择build Path下的Add External Archives导入系统任意路径下的jar包。但是这种方式并没有将jar包真正导入项目中,一旦迁移,则会丢失
2.通过右键项目,新建lib文件夹,直接将jar包拷贝到lib文件夹下,然后再通过build Path将jar包导入进来

 

4-7  应用 DOM4J 解析节点属性

1、创建一个 SAXReader 对象

SAXReader saxReader = new SAXReader();

2、通过SAXReader对象的read方法加载books.xml文件,获取docuemnt对象

Document document = saxReader.read(new file(...../book.xml));

3、通过 getRootElement() 获取根节点bookstore

Element bookstore = document.getRootElement();

4、通过 elementIterator() 获取book的迭代器

Iterator it = bookstore.elementIterator();

5、遍历迭代器,获取根节点中的信息(书籍)

while(it.hasNext()){

//获取子节点的元素

Element book = (Element)it.next();

}

6、获取属性节点类似 JDOM 解析

List<Attribute> attrs = book.attributes();

7、遍历,获取属性节点名、值

book.getName() book.getValue()

8、获取book子节点的迭代器

Iterator itt = book.elementIterator();

8、遍历,获取元素节点名、值

book.getName() book.getStringValue() / book.getText()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值