java dom4j解析_java dom4j解析器使用

java dom4j解析_java dom4j解析器使用JavaDOM4J解析器介绍DOM4J是一个开源的,基于Java的库来解析XML文档,它具有高度的灵活性,高性能和内存效率的API。这是java的优化,使用Java集合像列表和数组。它可以使用DOM,SAX,XPath和XSLT。它解析大型XML文档时具有极低的内存占用。优点DOM4J使Java开发的灵活性和XML解析代码易于维护。它是轻量级的,快速的API。DOM4J类DOM4J定义了几个J…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Java DOM4J解析器

介绍

DOM4J是一个开源的,基于Java的库来解析XML文档,它具有高度的灵活性,高性能和内存效率的API。这是java的优化,使用Java集合像列表和数组。它可以使用DOM,SAX,XPath和XSLT。它解析大型XML文档时具有极低的内存占用。

优点

DOM4J使Java开发的灵活性和XML解析代码易于维护。它是轻量级的,快速的API。

DOM4J 类

DOM4J定义了几个Java类。以下是最常见的类:

Document – 表示整个XML文档。文档Document对象是通常被称为DOM树。

Element – 表示一个XML元素。 Element对象有方法来操作其子元素,它的文本,属性和名称空间。

Attribute – 表示元素的属性。属性有方法来获取和设置属性的值。它有父节点和属性类型。

Node – 代表元素,属性或处理指令

常见DOM4J的方法

当使用DOM4J,还有经常用到的几种方法:

SAXReader.read(xmlSource)() – 构建XML源的DOM4J文档。

Document.getRootElement() – 得到的XML的根元素。

Element.node(index) – 获得在元素特定索引XML节点。

Element.attributes() – 获取一个元素的所有属性。

Node.valueOf(@Name) – 得到元件的给定名称的属性的值。

创建与解析XML示例

package com.example;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStreamWriter;

import java.util.Iterator;

import java.util.List;

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

import org.junit.Test;

public class Demo01 {

@Test

public void readXMLDemo() throws Exception {

// 创建saxReader对象

SAXReader reader = new SAXReader();

// 通过read方法读取一个文件 转换成Document对象

Document document = reader.read(new File(“src/car.xml”));

//获取根节点元素对象

Element node = document.getRootElement();

//遍历所有的元素节点

// listNodes(node);

elementMethod(node);

}

@Test

public void createXMLDemo() throws Exception {

Document document = DocumentHelper.createDocument();

Element root = document.addElement( “cars” );

Element supercarElement= root.addElement(“supercars”)

.addAttribute(“company”, “Ferrai”);

supercarElement.addElement(“carname”)

.addAttribute(“type”, “Ferrari 101”)

.addText(“Ferrari 101”);

supercarElement.addElement(“carname”)

.addAttribute(“type”, “sports”)

.addText(“Ferrari 202”);

// 写入到一个新的文件中

writer(document);

}

/**

* 把document对象写入新的文件

*

* @param document

* @throws Exception

*/

public void writer(Document document) throws Exception {

// 紧凑的格式

// OutputFormat format = OutputFormat.createCompactFormat();

// 排版缩进的格式

OutputFormat format = OutputFormat.createPrettyPrint();

// 设置编码

format.setEncoding(“UTF-8”);

// 创建XMLWriter对象,指定了写出文件及编码格式

// XMLWriter writer = new XMLWriter(new FileWriter(new

// File(“src//a.xml”)),format);

XMLWriter writer = new XMLWriter(new OutputStreamWriter(

new FileOutputStream(new File(“src//car.xml”)), “UTF-8”), format);

// 写入

writer.write(document);

// 立即写入

writer.flush();

// 关闭操作

writer.close();

}

/**

* 遍历当前节点元素下面的所有(元素的)子节点

*

* @param node

*/

public void listNodes(Element node) {

System.out.println(“当前节点的名称::” + node.getName());

// 获取当前节点的所有属性节点

List list = node.attributes();

// 遍历属性节点

for (Attribute attr : list) {

System.out.println(attr.getText() + “—–” + attr.getName()

+ “—” + attr.getValue());

}

if (!(node.getTextTrim().equals(“”))) {

System.out.println(“文本内容::::” + node.getText());

}

// 当前节点下面子节点迭代器

Iterator it = node.elementIterator();

// 遍历

while (it.hasNext()) {

// 获取某个子节点对象

Element e = it.next();

// 对子节点进行遍历

listNodes(e);

}

}

/**

* 介绍Element中的element方法和elements方法的使用

*

* @param node

*/

public void elementMethod(Element node) {

// 获取node节点中,子节点的元素名称为supercars的元素节点。

Element e = node.element(“supercars”);

// 获取supercars元素节点中,子节点为carname的元素节点(可以看到只能获取第一个carname元素节点)

Element carname = e.element(“carname”);

System.out.println(e.getName() + “—-” + carname.getText());

// 获取supercars这个元素节点 中,所有子节点名称为carname元素的节点 。

List carnames = e.elements(“carname”);

for (Element cname : carnames) {

System.out.println(cname.getText());

}

// 获取supercars这个元素节点 所有元素的子节点。

List elements = e.elements();

for (Element el : elements) {

System.out.println(el.getText());

}

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159385.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python安装pymssql「建议收藏」

    Python安装pymssql「建议收藏」Python安装pymssql(v2.1.3)pymssql下载地址:https://pypi.python.org/pypi/pymssql/python2.7×32版本下pymssql的安装:如果使用2.1.1版本:https://pypi.python.org/pypi/pymssql/2.1.1#downloads,下载时选择pymssql-2.1.1.win32-py2.7.exe

    2022年6月15日
    143
  • jquery和vue冲突吗_jquery和vue的区别

    jquery和vue冲突吗_jquery和vue的区别问题:一个h5项目同时引用了vue.js和jquery.js,发现jquery绑定的事件失效。原因是:vue会重新渲染dom,加上是异步实例vue.所以正常写程序的话jq的$()获取的元素不是vue渲染后的元素.解决办法:先加载vue.js,让页面渲染完成后加载jq,给jq绑定ready事件$(document).ready(function(){…

    2022年10月9日
    0
  • 非常详细的rsyslogd & logrotate配置文件解析[通俗易懂]

    非常详细的rsyslogd & logrotate配置文件解析[通俗易懂]rsyslog服务和logrotate服务======================================================================rsyslog是一个syslogd的多线程增强版。现在Fedora和Ubuntu,rhel6默认的日志系统都是rsyslog了rsyslog服务和logrotate服务=====

    2022年8月15日
    1
  • Idea导入jar包的两种方法

    Idea导入jar包的两种方法今天用IDEA,需要导入一个Jar包,因为以前都是用eclipse的,所以对这个idea还不怎么上手,连打个Jar包都是谷歌了一下。但是发现网上谷歌到的做法一般都是去File–>ProjectStructure中去设置,有没有如同eclipse一样简便的右键添加方法呢。然后自己摸索了一下,找到了。以阿里大于的依赖包为例子,因为正好是我遇到要导入的Jar包。先说下第一种方法吧。也就是Fi…

    2022年6月22日
    54
  • TP5.0 excel 导入导出

    TP5.0 excel 导入导出

    2021年10月13日
    44
  • system.Exception:端口已被占用1080「建议收藏」

    system.Exception:端口已被占用1080「建议收藏」找出是哪个程序占用了1080端口打开cmd.exe,输入命令:netstat-aon|findstr"1080"1最后一列就是PID了,我的是3104. 要想知道此PID对应什么程序,可以继续输入:tasklist|findstr"4568"1打开任务管理器,在进程里面找下wpscloudsvr.exe,或者在服务里面找PID为3104。…

    2022年9月7日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号