简单实现DOM4J解析查询XML
简单实现DOM4J解析XML文档
Dom4j获取document对象采用的是dom4j的包,因此,在实现之前需要进行导入第三方jar包。
需要导入的包分别有两个,一个是DOM4J的核心jar包,还有一个是在压缩包下的lib文件夹下的 jaxen包
进入DOM4J文档目录,点击index.html进入DOM4J目录,找到快速启动项,就能快速进行定位查询
XPATH
XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力。XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。
xpath的几个常用语法:
作用:将XML中的标签的层级关系,使用路径的形式表现出来
语法:
/ 如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径
// 如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)
* 星号 * 表示选择所有由星号之前的路径所定位的元素
[] 方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素.
@属性名 匹配相同属性名的所有标签
下面进行详细的导包演示:
- 在Java工程中创建一个lib文件夹
- 选中要导入的jar包,复制
- 复制粘贴到lib文件夹下面
- 导包之后需要把他进行关联,只有进行关联后才能算是导入成功!那么如何关联呢?具体的关联步骤如图
- 右键导入的文件,把把鼠标放到build path上,有一个 Add to Build Path 选项,单机,添加。成功后效果如下图,出现奶瓶形状之后才算导入成功
导包成功后,就可以进入正戏啦!
—在进行解析之前,我们来分析一下步骤
—实现步骤: - 1.获取到document对象
- 2.写出xpath的路径
- 3.拿到指定的标签
- 4.查询指定的文本内容(这里就以查询为例-_-)
需要使用到的类和API
SAXReader类:
Document read(File类型);
获取一个Document对象
document.selectSingleNode(xpath);
直接获取指定的单个节点,需要配合xpath使用
selectNodes(xpath);
获取多个节点
—具体实现代码如下:
public void testQuery() { /* * 实现步骤: * 1.获取到document对象 * 2.写出xpath路径 * 3.拿到指定的标签---selectSingleNode * 4.查询指定的文本内容 * */ //路径:这里需要创建一个File类来指定你的xml文件的路径 File f = new File("D:/eclipse/JavaEEWorkSpace/XML/contacts.xml"); //获取Document对象 SAXReader sr = new SAXReader(); Document document = sr.read(f); //配合xpath拿到指定的element对象 String xpath = "//linkman[@id='2']/name"; Node name = document.selectSingleNode(xpath); //打印输出查询的结果 System.out.println(name.getText()); }
–当然,配合xpath还可以对XML文件进行修改和删除,增加的话要麻烦一点
–下面附上增删改的代码:
当然,这是我做的例子,可以拿去修改下,直接用!嘻嘻,不过,用之前,得看一下你的XML文档啦!
增删改需要关联实体文件,不然操作不成功,嘻嘻。
—增加
Element接口:
Element addElement(标签名)
添加一个标签
XMLWriter类:格式友好的输出形式
XMLWriter(Writer writer,OutputFormat format)
构造一个具有良好输出格式的XML输出对象
void write(Node node)
将一个document输出到实体文件中
void close()
关闭输出
OutputFormat类:输出格式类
OutputFormat createPrettyPrint()
构造一个良好的格式对象
public void testAdd() throws Exception { /* * 需求:添加一个linkman标签及其子标签,仿照前两个linkman样式 * */ //路径 File f = new File("D:/eclipse/JavaEEWorkSpace/day04_XML/contacts.xml"); //获取Document对象 SAXReader sr = new SAXReader(); Document document = sr.read(f); //拿到根标签 Element root = document.getRootElement(); //添加子标签,并设置属性 Element addele = root.addElement("linkman").addAttribute("id", "3"); //添加子标签--并设置文本 addele.addElement("name").setText("gm"); addele.addElement("email").setText("gmclub@gm.com"); addele.addElement("address").addText("哒哒哒哒"); addele.addElement("group").setText("吧嗒吧嗒"); //将数据关联到实体文件中 /*FileWriter fw = new FileWriter(f); document.write(fw); fw.close();*/ //友好格式输出,XMLWriter 类中的这个类型OutputFormat.createPrettyPrint()方法可以友好的输出哦,就是按格式排版,嘻嘻。 XMLWriter wri = new XMLWriter(new FileWriter(f),OutputFormat.createPrettyPrint()); wri.write(document); wri.close();
—修改
Document接口:
void write(Write类型)
将内存数据关联给一个字符输出流
Element接口:
void setText(设置值)
设定标签中的文本数据
public void testAlter() throws Exception { /* * 需求:修改第id=3的linkman的group为叭嗒叭哒 * 实现步骤: * 1.获取对象 * 2.设置值 * 3.保存到文件 * */ //路径 File f = new File("D:/eclipse/JavaEEWorkSpace/day04_XML/contacts.xml"); //获取Document对象 SAXReader sr = new SAXReader(); Document document = sr.read(f); //获取到element对象 String xpath = "//linkman[@id='3']/group"; document.selectSingleNode(xpath).setText("叭嗒叭哒"); //将数据输出到实体文件 //友好格式输出 XMLWriter wri = new XMLWriter(new FileWriter(f),OutputFormat.createPrettyPrint()); wri.write(document); wri.close(); }
—删除
Element接口:
Element getParent()
获取父标签
Boolean remove(Element对象)
删除指定标签
public void testRemove() throws Exception { /* * 需求:删除id为4的linkman * 实现步骤: * 1.获取document对象 * 2.删除指定的element对象 * 3.保存数据到实体文件 * */ //路径 File f = new File("D:/eclipse/JavaEEWorkSpace/day04_XML/contacts.xml"); //获取Document对象 SAXReader sr = new SAXReader(); Document document = sr.read(f); //删除指定标签 String xpath = "//linkman[@id='4']"; Node linkman = document.selectSingleNode(xpath); linkman.getParent().remove(linkman); //将数据输出到实体文件 //友好格式输出 XMLWriter wri = new XMLWriter(new FileWriter(f),OutputFormat.createPrettyPrint()); wri.write(document); wri.close(); }
—好了,分享就到这里,希望对你有帮助哦,嘻嘻。
3ff7- 简单实现dom4j解析xml
- Dom4j解析XML简单应用,XStream实现Java、XML转换
- Ruby解析XML简单实现
- 使用Dom4j实现对XML文档的解析
- JAVA XML转JSON简单实现(dom4j)
- DOM4J实现XMl的增加,删除,修改,查询
- Android上实现一个简单的天气预报APP(五) 解析XML
- java实现简单解析XML文件功能示例
- Dom4j解析XML学习之简单解析
- 使用dom4j解析xml文档以及用XPath实现相关的操作
- dom4j创建和解析xml文档的实现方法
- xml之解析原理及dom4j查询---2
- 基于Dom4J实现XML快速解析(一)
- 最简单的一个XML解析-dom4j
- 简单的DOM解析XML文件,并实现增,删,改,查的操作
- 使用dom4j实现java解析XML实例
- dom、SAX、Jdom、dom4j四种解析xml方式简单总结
- 利用dom4j解析.xml之查询标签的文本信息
- xml之解析原理及dom4j查询---2
- xml之解析原理及dom4j查询---2