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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • TLSF算法分析

    TLSF算法分析注:本文的大部分内容摘录自论文《TLSF:aNewDynamicMemoryAllocatorforReal-TimeSystems》,可以通过“科学上网”访问如下链接阅读原文:http://www.gii.upv.es/tlsf/files/ecrts04_tlsf.pdf。什么是TLSFTLSF是TwoLevelSegregatedFitmemoryal

    2022年6月30日
    29
  • navicat 15激活码-激活码分享[通俗易懂]

    (navicat 15激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html09LVN3XLKC-eyJsaWNlbnNlSWQi…

    2022年3月28日
    1.1K
  • uart 时序_8080接口时序

    uart 时序_8080接口时序数据传送速率用波特率来表示,指单位时间内载波参数变化的次数,或每秒钟传送的二进制位数  如每秒钟传送240个字符,而每个字符包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为2400Bd  传输时序如下图    在UART中,信号线上共有两种状态,分别用逻辑1(高电平)和逻辑0(低电平)来区分  在空闲时,数据线应该保持在逻辑高电平状态  其中…

    2022年9月14日
    3
  • nodejs和java多线程_nodeJS和Java哪个难?「建议收藏」

    nodejs和java多线程_nodeJS和Java哪个难?「建议收藏」刚好最近学了一点Java,来回答下这个问题。首先这个问题不好说谁难谁易(就像是问篮球足球谁难),深入学习之后会发现都很难。nodeJS底层是依赖v8跟libuv(c\c++),部分模块是用c++编写,所以深入了解之后会发现还得学c++。而Java将代码编译成字节码运行在虚拟机上,相应的Java字节码、JVM都要去了解。所以研究底层的话两者都很难,不太好区分谁更难。不过从题主的问题来看可能想问的是n…

    2022年7月7日
    30
  • 对象转JSON首字母大写[通俗易懂]

    对象转JSON首字母大写[通俗易懂]最近在做一个第三方接口,接口给的数据类型如下请求报文如下{“A0144″:”12141256″,”AB6AM”:”中国银行支行”,”STATUS”:1}一般按照对象转JSON会使首字母小写,与接口文档不相符,因此需要转为大写,在字段名称前加@JSONField(name=””)注释即可如下:packagecn.com.cis.acic.util.personHr.vo.request;importcom.alibaba.fastjson.annotation.JS…

    2022年9月16日
    4
  • 程序员看过都说好的资源网站,你懂得![通俗易懂]

    程序员看过都说好的资源网站,你懂得![通俗易懂]身为一个程序员,有时候为了程序的界面好看,不得不去查找一些好看的图标或者图片等来装饰网站,那么问题来了,去哪里找?不用慌,程序羊为大家整理了一些常用的网站,希望能对您有帮助!后续还会不断更新。喜欢记得关注程序羊喔,不然下次您就找不到程序羊了。

    2022年6月10日
    83

发表回复

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

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