[学习笔记]XML解析之DOM4J
发布时间:2020-12-16 06:13:34 所属栏目:百科 来源:网络整理
导读:DOM4J XML解析 1. 常用API 解析器:SAXReader 文档对象:Document 元素对象:Element 文档帮助类(用于创建节点):DocumentHelper 文档对象子类:DefaultElement 文档对象子类:BaseElement 格式化输出对象:OutputFormat 保存文件对象:XMLWriter 2. 解析XML
DOM4JXML解析1. 常用API
2. 解析XML获取文档对象
3. 获取节点文本内容private
static
String
getElementText
(
Document
doc
)
{
// 获取根节点
Element
root
=
.
getRootElement
();
// 获取指定节点集合
List
<
Element
>
elements
root
elements
(
"City"
);
// 获取指定节点
e
elements
get
(
7
);
// 获取指定节点的文本内容
text
e
getText
();
return
text
;
}
4. 递归获取所有节点的文本5.使用迭代器获取所有City节点的元素内容 getCityElementText// 获取根元素节点// 使用元素迭代器进行迭代Iterator iterator rootelementIterator iteratorhasNext();) e next// 如果该节点无子元素节点,则输出元素文本内容e 6.将Document保存到XML中
saveXMLtry// 创建XML文件的字节输出流OutputStream out newFileOutputStream("src/LocalList.xml"// 获取数据格式的对象,createCompactFormat紧凑格式,createPrettyPrint缩进格式OutputFormat format OutputFormatcreatePrettyPrint// 创建XMLWriter对象XMLWriter writer XMLWriter, format// 将DOM树写入XML文件 writerwritedoc// 关闭资源closecatchIOException eprintStackTrace 7.修改元素文本内容
update// 获取要修改节点get(3// 修改文本内容 elementsetText"天上人间"// 保存文件 8.添加子元素节点
addChild// 获取要添加的父元素节点 city // 创建要添加的子元素节点 street DocumentHelpercreateElement"street"// Element streetE1 = new DefaultElement("street");// Element streetE2 = new BaseElement("street");// 设置节点的文本内容 streetsetText"南天门大街"// 将子节点添加到父节点中 cityaddstreet 9.添加兄弟元素节点
public addSibling// 获取目标元素节点 elist "City"// 创建要添加的元素节点DefaultElement);// <City></City>// 设置新节点的文本"哈哈区"// 在指定位置加入元素 city elist4 10.删除指定节点
removeElement// 获取要删除节点).0// 用父节点删除子节点remove 11.为节点添加属性
addAttribute// 获取要添加属性的节点// 为节点添加属性addAttribute"type" "food"}
XPath概述
XPath的作用就像在一个文件系统中定位文件一样在XML文件中定位元素,XPath是由W3C的XPath 1.0标准所描述。
标准1.如果路径以斜线 / 开始,那么该路径就表示到一个元素的绝对路径。
/AAA/CCC:选择AAA的所有CCC子元素。
2.如果路径以双斜线 // 开头,则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)。
//DDD/BBB:选择父元素是DDD的
所有
BBB元素。
3.星号 * 表示选择所有由星号之前的路径所定位的元素。
/*/*/*/BBB:选择所有的有3个祖先元素的BBB元素。
//*:选择所有元素。
4.方块号里的表达式可以进一步的指定元素,其中数字表示元素在选择集里的位置,而last()函数则表示选择集中的最后一个元素。
/AAA/BBB[1]:选择AAA的第一个BBB子元素。
/AAA/BBB[last()]:选择AAA的最后一个BBB子元素。
5. 使用 @ 符号来选择特定的属性或特定属性的元素。
//@id:选择所有的id属性。
//BBB[@id]:选择有id属性的BBB元素。
//BBB[not(@*)]:选择没有属性的BBB元素。
6.属性的值可以被用来作为选择的准则,normalize-space函数删除了前部和尾部的空格,并且把连续的空格串替换为一个单一的空格。
//BBB[@id='b1']:选择含有属性id且其值为'b1'的BBB元素。
//BBB[normalize-space(@name)='bbb']:选择含有属性name且其值(在用normalize-space函数去掉前后空格后)为'bbb'的BBB元素。
7.多个路径可以用分隔符 | 合并在一起。
/AAA/EEE | //BBB:选择所有的BBB元素和作为AAA子元素的
所有
EEE元素。
8. 相关函数
//*[count(BBB)=2]:选择含有2个BBB子元素的元素。
//*[name()='BBB']:选择所有名称为BBB的元素,等价于//BBB。
//*[starts-with(name(),'B')]:选择所有名称以"B"起始的元素。
//*[contains(name(),'C')]:选择所有名称包含"C"的元素。
//*[string-length(name()) < 3]:选择名字长度小于3的元素。
DOM4J中XPath的使用
1.使用XPath获取指定节点 getNodeNode node selectSingleNode"/State/City/street"()); 2.使用XPath获取节点集合
getNodesNode nodes selectNodes"/State/City"nodessize 3.使用XPath获取指定属性
<?xml version="1.0" encoding"UTF-8"?><dao> <student><class>com.xml.dao.impl.StudentDaoByDom4j</class><db>src/com/xml/db/student.xml</db></student></dao>
getAttribute// 获取拥有Name属性的节点selectSingleNode"//*[@Name]"// 获取该节点的Name属性值String name valueOf"@Name"name 案例
学生信息存储
Dom4jUtils:DOM4J解析的工具类,包括获取文档对象方法和保存文件方法。
classDom4jUtils/** * 获取XML数据的Document对象 * * @return */ getDocument pathpath ==nullreturn// 创建XML解析器 doc SAXReader reader SAXReader// 解析XML文件 readerreadpathDocumentException// 异常处理"读取XML失败!" * 将Document对象保存到XML文件中 * @param doc 要保存的Document对象boolean saveXmlnull||false// 创建保存格式 of // 创建XML写入对象XMLWriter writer // 将Document对象写入到XML文件中 os (File));XMLWriteros of"文件写入错误!"finally// 资源释放writer "资源关闭错误!"true}
config.xml:配置具体Dao的实现类名,xml数据存储路径。
student.xml:学生数据存储的xml文件。
<students> <student studentid="1255" classid"55"><name>帅哥</name><gender>男</gender><score>90</score></student></students>
StudentDao:DAO的接口设计
package comxmldao;importbean.StudentinterfaceStudentDao * 添加学生信息 * @param s 要添加的学生对象 addStudent s * 删除学生的信息 * @param sid 要删除的学生iddeleteint sid * 查询学生成绩 * @param sid 要查询的学生idfloat getScore
StudentDaoFactory:DAO的获取工厂类,该类为枚举单例,通过config.xml的配置信息,提供获取具体DAO对象的公有方法。
orgdom4jDocumentutilDom4jUtilsenumStudentDaoFactory dao getInstance sdao // 获取配置信息XML文档的Document对象getDocument"bin/com/xml/config/config.xml"// 获取StudentDao的实现类名 className "/dao/student/class"// 创建StudentDao实现类StudentDaoClassforNameclassNamenewInstanceInstantiationException|IllegalAccessExceptionClassNotFoundException"配置信息错误!找不到该类。" sdao
StudentDaoByDom4j:DAO的实现类,根据配置信息能够获取具体数据XML的位置,并对之操作。
implStudentDaoByDom4jimplements path StudentDaoByDom4j config // 获取学生信息存储路径this config"/dao/student/db"// 获取学生信息XML文档的Document对象doc @Override// 性别预处理String[] mask {"男""女""人妖"};// 在根节点下创建学生元素并设置属性addElement"student"addAttribute"studentid"valueOfsgetId()))"classid"getClassId()));// 为学生元素添加子元素"name"getName"gender"mask[getGender()]);"score"getScore// 将Document保存到XML文件中saveXml// 获取要删除的节点"/students/student[@studentid='"+sid"']"// 使用父节点删除该节点getParentremove// 获取要查询成绩的学生成绩 score "']/score"// 返回成绩FloatparseFloatscore
测试
testjunitTestStudentDaoFactoryStudentDaoTest sdao getInstance();@Test testAdd s 1248"苏苏"55280add testDelete sdao.delete testGetScore1255}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |