dom4j操作XML

(一)创建Document的基本操作

/**
* XML基本操作
*/
public void BaseOperation(){
//创建一个document
Document document=DocumentHelper.createDocument();
//创建根结点
Element root=document.addElement("root");
//为根结点添加一个book节点
Element book1=root.addElement("book");
//为book1添加属性type
book1.addAttribute("type","science");
//为book1添加name子节点
Element name1=book1.addElement("Name");
//并设置其name为"Java"
name1.setText("Java");
//为book1创建一个price节点,并设其价格为100
book1.addElement("price").setText("100");//为根结点添加第二个book节点,并设置该book节点的type属性
Element book2=root.addElement("book").addAttribute("type","science");
//为book1添加name子节点
Element name2=book2.addElement("Name");
//并设置其name为"Oracle"
name2.setText("Oracle");
//为book1创建一个price节点,并设其价格为200
book2.addElement("price").setText("200");//输出xml
System.out.println(document.asXML());
}

调用BaseOperation,输出结果为:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<book type="science">
<Name>Java</Name>
<price>100</price>
</book>
<book type="science">
<Name>Oracle</Name>
<price>200</price>
</book>
</root>

(二)根据一个符合Document格式的字符串来生成一个Document

/**将字符串转化为Document
* @param str 输入的字符串
* @return 生成的document
* @throws DocumentException
*/
public Document parserStrtoDocument(String str) throws DocumentException{Document document=DocumentHelper.parseText(str);return document;
}

调用示例:

String str="<root><book type='science'><Name>Java</Name><price>100</price></book></root>";
Document document = parserStrtoDocument(str);
System.out.println(document.asXML());

输出结果为:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<book type="science">
<Name>Java</Name>
<price>100</price>
</book>
</root>

(三)取得xml节点属性的基本方法

/**
* 取得xml的节点和属性的值
* @throws DocumentException
*/
public void getBaseInfofromDocument() throws DocumentException{
String str="<root><book type='science'><Name>Java</Name><price>100</price></book></root>";
//生成一个Document
Document document = DocumentHelper.parseText(str);
//取得根结点
Element root=document.getRootElement();
//取得book节点
Element book=root.element("book");
//取得book节点的type属性的值
String type=book.attributeValue("type");
//取得Name节点
Element name=book.element("Name");
//取得书名
String bookname=name.getText();
//取得书的价钱
int price=Integer.parseInt(book.element("price").getText());//输出书目信息
System.out.println("书名:" bookname);
System.out.println("所属类别:" type);
System.out.println("价格:" price);
}

调用getBaseInfofromDocument,输出结果为:

书名:Java
所属类别:science
价格:100

(四)利用迭代,xpath取得节点及其属性值

/**利用迭代,xpath取得xml的节点及其属性值
* @throws DocumentException
*/
public void getComplexInfofromDocument() throws DocumentException{String str="<root><book type='science'><Name>Java</Name><price>100</price></book>"
"<book type='science'><Name>Oracle</Name><price>120</price></book>""<book type='society'><Name>Society security</Name><price>130</price></book>"
"<author><name>chb</name></author></root>";
//生成一个Document
Document document = DocumentHelper.parseText(str);//提取类型为"society"的书
//此处需要添加支持xpath的jar包,详细见备注
Element society_book=(Element)document.selectSingleNode("/root/book[@type='society']");
System.out.println(society_book.asXML());//提取价格节点的列表
System.out.println("-----------价格列表-------------");
List price=document.selectNodes("//price");
for(int i=0;i<price.size();i ){
Element elem_price=(Element)price.get(i);
System.out.println(elem_price.getText());
}//循环根结点下的所有节点,若当前节点为book,则输出这本书的详细信息
System.out.println("-------------书目详情------------");
System.out.println("书名\t\t类别\t\t价格");
Element root=document.getRootElement();
Iterator iterator=root.elementIterator();
while(iterator.hasNext()){
Element element=(Element)iterator.next();
if(element.getName().equals("book")){
System.out.print(element.element("Name").getText() "\t");
System.out.print(element.attributeValue("type") "\t\t");
System.out.print(element.element("price").getText() "\n");
}
}//查找作者姓名
Element author=(Element)document.selectSingleNode("//author");
System.out.println("---------" author.element("name").getText() "----------");
//提取作者的所有书目名称
Iterator iterator_book=root.elementIterator("book");
while(iterator_book.hasNext()){
Element book=(Element)iterator_book.next();
System.out.print(book.element("Name").getText() "\t");
}//属性迭代
System.out.println("\n-------属性迭代--------");
String str1="<book type='science' name='Java' price='100'/>";
Document document1=DocumentHelper.parseText(str1);
//开始迭代
Iterator iterator_attribute=document1.getRootElement().attributeIterator();
while(iterator_attribute.hasNext()){
//提取当前属性
Attribute attribute=(Attribute)iterator_attribute.next();
System.out.println(attribute.getName() ":" attribute.getValue());
}
}

调用getComplexInfofromDocument,输出结果为:

<book type="society"><Name>Society security</Name><price>130</price></book>
-----------价格列表-------------
100
120
130
-------------书目详情------------
书名 类别 价格
Java science 100
Oracle science 120
Society security society 130
---------chb----------
Java Oracle Society security
-------属性迭代--------
type:science
name:Java
price:100

备注:调用该方法之前,应该先向工程中添加支持xpath的jar包,否则,会出现以下错误:

java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:183)
at xml_chb.dom4j_chb.getComplexInfofromDocument(dom4j_chb.java:82)
at xml_chb.dom4j_chb.main(dom4j_chb.java:92)
Exception in thread "main"

转载于:https://www.cnblogs.com/xuanzai/archive/2012/09/12/2681269.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260423.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle数据库中闪回恢复的详细分析

Oracle9i开始提供闪回查询&#xff0c;以便能在需要的时候查到过去某个时刻的一致性数据&#xff0c;这是通过Undo实现的。这个功能有很大的限制&#xff0c;就是相关事务的undo不能被覆盖&#xff0c;否则就无力回天了。oracle10g大大的增强了闪回查询的功能&#xff0c;并且提…

python 查看当前目录_「Python」打包分发工具setuptools学习

❝setuptools是python标准的打包分发工具&#xff0c;它可以将我们编写的python项目打包安装&#xff0c;这样其他同事就可以像调用标准库或python第三方库那样直接使用&#xff1b;也可以将项目上传到Pypi供更多人的下载安装使用。❞1. 项目结构项目结构❝这是一个打包构建好的…

如何杀掉D状态的进程?[zt]【转】

转自&#xff1a;http://blog.csdn.net/chinalinuxzend/article/details/4288791 [-] 如何杀掉D状态的进程zt相关博文原贴:http://www.xclinux.cn/?p752 如何杀掉D状态的进程&#xff1f;[zt] 状态为 D (Uninterruptible sleep) &#xff0c;以及状态为 Z (Zombie)这些垃圾进程…

九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题)

九月十月百度人搜&#xff0c;阿里巴巴&#xff0c;腾讯华为小米搜狗笔试面试八十题 &#xff08;参与算法&面试题交流与讨论&#xff0c;请加群&#xff1a;30382647&#xff09;引言 自发表上一篇文章至今&#xff08;事实上&#xff0c;上篇文章更新了近3个月之久&#…

mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

一、数据库结构优化(非常重要)1.1 数据库结构优化目的1、减少数据冗余&#xff1a;(数据冗余是指在数据库中存在相同的数据&#xff0c;或者某些数据可以由其他数据计算得到)&#xff0c;注意&#xff0c;尽量减少不代表完全避免数据冗余&#xff1b;2、尽量避免数据维护中出现…

python git是什么_python爬虫之git的使用

一、简单认识&#xff1a; 1、初始化文件夹为版本控制文件夹&#xff0c;首先建立一个文件夹&#xff0c;进入这个文件夹以后输入git init初始化这个文件夹。2、Git几种位置概念 1、本地代码&#xff1a;本地更改完代码以后&#xff0c;虽然是存放在git的文件夹里面&#xff0c…

产品经理网站数据分析之测量问题现状(二)

本章续接上文&#xff0c;主要讲解流程图的绘制要领&#xff0c;以及示例。 1、基础流程图 基础流程图应该简明扼要地描述出流程的主要结构&#xff0c;在弄清楚流程的起点、终点&#xff0c;以及主要步骤后&#xff0c;按照流程的先后顺序&#xff0c;按照要展示的流程长短比例…

键盘流的逆袭- Idea 中使用 VIM mode 提高生成效率

Idea 中使用 VIM mode 提高生成效率 安装配置 Idea 的 vim 插件 先挖坑&#xff0c;后续再填。这个毫无技术含量&#xff0c;不写了&#xff0c;自己去搜吧。 快捷键代替鼠标 打开文件 按两下 shift 键 > 输入类目文件名按 command e &#xff0c;打开最近编辑的文件列表&a…

git 撤销挂起的更改_Timer计时任务因系统时间的修改导致挂起解决方案

之前开发的一款运行在定制Android设备上的一个实时监控程序发生了一个很奇怪的问题&#xff1a;关机状态下放置了半个月左右的时间之后&#xff0c;再次开机使用&#xff0c;使用到一半的时候&#xff0c;显示界面就卡死在某一个状态下了(显示界面只显示一行文字&#xff0c;代…

yii urlmanager配置post不生效_一文带你彻底学会 Git Hooks 配置

你好&#xff0c;我是小桔&#xff0c;是一个没有感情的代码崽。今天给大家介绍一下 Git Hooks&#xff0c;相信 Git 大家都在用吧&#xff0c;Git 除了用作版本控制&#xff0c;还有许多高级功能&#xff0c;Git Hooks 就是其中之一。本文环境&#xff1a;Git 版本&#xff1a…

Tiff – 值得你体验一下的可视化的字体对比工具

Tiff 是一款字体对比工具&#xff0c;可视化对比两种字体之间的差异。这是一个工具来帮助比较两种字体&#xff0c;同时学习排版。在这一点上&#xff0c;谷歌 Web 字体作为 Tiff 外部字体文件的唯一来源。由于应用程序使用的一些功能需要 HTML5 和 CSS3 支持&#xff0c;因此请…

[.NET] 建构子中传递子对象的对象

在设计对象继承的时候&#xff0c;父对象建构子会需要一些参数&#xff0c;这些参数可以由子对象建构子透过base关键词来提供。 namespace Test001 {public class ParentClass{// Constructorspublic ParentClass(IEnumerable<string> dataCollection){this.DataCollecti…

php基础教程(三):变量

1、php变量规则 变量以 $ 符号开头&#xff0c;其后是变量的名称变量名称必须以字母或下划线开头变量名称不能以数字开头变量名称只能包含字母数字字符和下划线&#xff08;A-z、0-9 以及 _&#xff09;变量名称对大小写敏感&#xff08;$y 与 $Y 是两个不同的变量&#xff09;…

操作系统实验文件管理_系统设计硬核知识(5)——操作系统的文件管理

操作系统对计算机的管理包括两个方面&#xff1a;硬件资源和软件资源。硬件资源的管理包括CPU 的管理、存储器的管理、设备管理等&#xff0c;主要解决硬件资源的有效和合理利用问题。软件资源包括各种系统程序、各种应用程序、各种用户程序&#xff0c;也包括大量的文档材料、…

错误 0xc0202049: 数据流任务 1: 无法在只读列“ID”中插入数据

数据库导入导出时总失败&#xff0c;错误信息如下&#xff1a; 正在验证 (错误) 消息错误 0xc0202049: 数据流任务 1: 无法在只读列“ID”中插入数据。 (SQL Server 导入和导出向导) 错误 0xc0202045: 数据流任务 1: 验证列元数据失败。 (SQL Server 导入和导出向导) 错误 0xc0…

python中的items方法_Python 字典的items()方法和iteritems()方法有什么不同?【面试题详解】...

今天爱分享给大家带来Python 字典的items()方法和iteritems()方法有什么不同?【面试题详解】&#xff0c;希望能够帮助到大家。 字典是 Python 语言中唯一的映射类型。映射类型对象里哈希键(键&#xff0c;key)和指向的对象&#xff08;值&#xff0c;value)是多对一的关系&am…

大网高级技术笔记(一)

防伪码&#xff1b;黑发不知勤学早&#xff0c;白首方悔读书迟本章目标&#xff1a;理解消化动态路由协议与OSPF协议并应用于实际工作中。第一章 动态路由协议一、按照路由执行的算法分类距离矢量路由协议&#xff1a;RIP、IGRP链路状态路由协议&#xff1a;OSPE、IS-IS二、RIP…

容器类基础篇(一)

容器类&#xff1a;用来解决数组具有固定尺寸而使得灵活性受限的问题。基本的容器类&#xff08;集合类&#xff09;有&#xff1a;List、Set、Queue、Map。 Java容器类类库的用途是用来“保存对象”&#xff0c;这分为两个不同的大类&#xff1a; 1.Collection&#xff08;集合…

阿里MySQL读写一致_阿里面试题:如何保证缓存与数据库的双写一致性?

作者&#xff1a;你是我的海啸出处&#xff1a;https://blog.csdn.net/chang384915878/article/details/86756463只要用缓存&#xff0c;就可能会涉及到缓存与数据库双存储双写&#xff0c;你只要是双写&#xff0c;就一定会有数据一致性的问题&#xff0c;那么你如何解决一致性…

反射小应用之DataTable和ListT互操作

反射小应用之DataTable和List<T>互操作 在程序中&#xff0c;往往会遇到一些小情况&#xff0c;就是数据库取出来的时候为了方便直接将数据通过存储在DataSet或DataTable中&#xff0c;这样做的一个后果是在日后的的对数据进行”细“操作时&#xff0c;就发现它可能没有L…