org.dom4j.io.SAXReader 读取XML 文件

Java org.dom4j.io.SAXReader 的作用是使用SAX解析器读取XML文件并将其转换为DOM对象模型。它可以遍历XML文档的节点树,访问和操作各个节点及其属性值,并支持XPath表达式查询

SAXReader reader = new SAXReader();
//获取类路径下资源文件的输入流
InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream(configLocation);

try {
    //读取配置文件, 返回DOM对象模型
    Document document = reader.read(in);
    /*selectNodes() 方法接收一个XPath表达式作为参数,返回所有匹配该表达式的节点集合(List<Node>)。这些节点可以是元素节点、属性节点或者文本节点等。*/
    List<Node> beans = document.selectNodes("//bean");
} catch (DocumentException e) {
    e.printStackTrace();
}

reader.read(in) 的作用是使用SAX解析器从给定的输入流(InputStream)中读取XML文档数据,并将其转换为DOM对象模型。在该方法内部,SAX解析器会按照XML文档的结构对数据进行解析,同时在解析过程中生成相应的事件(如开始元素、结束元素、文本等)。然后,SAXReader会根据这些事件创建一个DOM对象模型,即所谓的Document对象,该对象可以通过操作其节点和属性信息来访问或修改XML文档内容。需要注意的是,在文档解析过程中,SAXReader不会将整个XML文档一次性加载到内存中,而是逐个节点地读取并解析,有效避免了资源浪费和内存溢出的问题。

document.selectNodes() 的作用是在通过SAXReader将XML文件解析成为DOM对象模型(即Document对象)后,通过XPath表达式对该文档的节点信息进行查询和操作。其中,selectNodes() 方法接收一个XPath表达式作为参数,返回所有匹配该表达式的节点集合(List<Node>)。这些节点可以是元素节点、属性节点或者文本节点等。

例如,假设我们需要从一个名为“address_book.xml”的XML文件中读取所有名字为“张三”的联系人的详细信息(包括姓名、电话、邮箱等),我们可以使用如下代码实现:

SAXReader reader = new SAXReader();
InputStream in = new FileInputStream("address_book.xml");
Document document = reader.read(in);
List<Node> nodes = document.selectNodes("//contact[@name='张三']");
for (Node node : nodes) {
    String name = node.selectSingleNode("name").getText();
    String phone = node.selectSingleNode("phone").getText();
    String email = node.selectSingleNode("email").getText();
    System.out.println("Name: " + name + ", Phone: " + phone + ", Email: " + email);
}

 以上代码中,"//contact[@name='张三']" 表示匹配所有name属性为“张三”的contact元素节点。selectSingleNode() 方法则用于获取指定节点名称的单个节点,并通过 getText() 方法获取其文本内容。最终,程序会输出符合条件的联系人的姓名、电话和邮箱信息。

XPath是一种用于在XML文档中定位和选择节点的语言,它可以用于编写查询表达式、筛选和提取文本内容以及导航结构化文档等任务。要书写XPath表达式,需要掌握以下几个基本概念:

- 节点:XML文档由节点组成,节点可以是元素、属性、文本或者命名空间等。
- 路径:XPath使用路径描述节点之间的关系,每一个节点都有一个唯一的路径来表示它在文档中的位置。
- 选择器:XPath提供了多种选择器(称为“轴”),用于选择文档中与指定条件匹配的节点,其中包括子节点、父节点、兄弟节点以及祖先或后代节点等。

下面简单介绍XPath表达式如何书写:

1.选择所有节点
//*
上述表达式会选中文档中的所有节点,包括根节点。

2.选择指定名称的元素节点

//element-name
例如://book 

3.选择带有特定属性的元素节点

//element-name[@attribute-name='attribute-value']
 

4.选择指定节点的直接子节点

/parent-element/child-element
 

5.选择指定节点的所有子孙节点

/parent-element//child-element
 

XPath 语法 | 菜鸟教程 (runoob.com)


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值