分别使用dom4j和jdk自带的方法解析xml文件

java中使用Dom4j的xPath解析xml文件 一、基本概念 1、XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。 XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。 XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初 XPath 的提出的初衷是将 其作为一个通用的、介于XPointer与XSL间的语法模型。但是 XPath 很快的被开... 阅读详情

分别使用dom4j和jdk自带的方法解析xml文件。


xml文件

xml文件内容如下(waitReader.xml):

<!DOCTYPE x172.xml>
<course>
    <courseInfo security="8" new="true" alias="冷笑话精选" courseType="wb-article">
        第一个节点的text内容
        <item id="-1" name="first">第一个节点的第1个子节点</item>
        <item id="-2" name="second">第一个节点的第2个子节点</item>
    </courseInfo>

    <second>
        <item id="0">第二个节点的第1个子节点</item>
        <item id="1">第二个节点的第1个子节点</item>
    </second>
</course>

使用dom4j解析xml

pom.xml引入dom4j

        <!-- dom4j -->
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.4</version>
        </dependency>

解析xml的代码:

package com.example.study.common;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.xml.sax.SAXException;

import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;

/**
 * 使用dom4j解析xml文件
 */
public class XmlParse {
    public static void parse(String file) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(file);
        Element rootElement = document.getRootElement();
        recursionReadElement(rootElement);
    }

    private static void recursionReadElement(Element element) {
        if (element == null) {
            return;
        }
        String path = element.getPath();
        int level = path.length() - path.replace("/", "").length();
        String levelSpace = genlevelSpace(level);
        System.out.println(levelSpace + "标签路径:" + element.getPath());
        System.out.println(levelSpace + "父标签(Element):" + element.getParent());
        System.out.println(levelSpace + "标签名:" + element.getName());
        System.out.println(levelSpace + "标签包裹的内容:" + element.getText().trim()
                .replace("\n", "")
                .replace("\r", ""));
        // System.out.println(levelSpace + "获取指定标签:" + element.element("content"));
        // System.out.println(levelSpace + "获取指定属性:" + element.attribute("id"));
        System.out.print(levelSpace + "标签属性:" + System.getProperty("line.separator") + levelSpace + "attr:");
        for (Attribute attribute : element.attributes()) {
            System.out.print(String.format("%s=%s\t", attribute.getName(), attribute.getValue()));
        }
        System.out.println(System.getProperty("line.separator"));
        for (Element subElement : element.elements()) {
            recursionReadElement(subElement);
        }
    }

    private static String genlevelSpace(int level) {
        StringBuilder sb = new StringBuilder();
        while (--level > 0) {
            sb.append("    ");
        }
        return sb.toString();
    }

    public static void main(String[] args) throws DocumentException, IOException, SAXException, ParserConfigurationException {
        String file = "F:\\tmp\\waitReader.xml";
        parse(file);
    }
}

使用jdk自带方法解析xml

解析xml的代码:

package com.example.study.common;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;

/**
 * 使用jdk自带方法解析xml文件
 */
public class XmlParse {
    public static void parse(String file) throws ParserConfigurationException, IOException, SAXException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(file);
        Element documentElement = document.getDocumentElement();
        NodeList childNodes = documentElement.getChildNodes();
        for (int i = 0; i < childNodes.getLength(); i++) {
            Node childNode = childNodes.item(i);
            if (childNode.getTextContent().trim().isEmpty()) {
                continue;
            }
            recursionReadElement(childNode);
            System.out.println("--->");
        }
    }

    private static void recursionReadElement(Node node) {
        if (node == null) {
            return;
        }
        int level = getLevel(node, 0);
        String levelSpace = genlevelSpace(level);
        System.out.println(levelSpace + "标签级别:" + level);
        System.out.println(levelSpace + "父标签(Element):" + node.getParentNode());
        System.out.println(levelSpace + "标签名:" + node.getNodeName());
        System.out.println(levelSpace + "标签包裹的内容:" + node.getTextContent()
                .replace("\n", "")
                .replace("\r", ""));
        System.out.print(levelSpace + "标签属性:" + System.getProperty("line.separator") + levelSpace + "attr:");
        NamedNodeMap attributes = node.getAttributes();
        for (int index = 0; attributes != null && index < attributes.getLength(); index++) {
            Node attribute = attributes.item(index);
            if (attribute.getTextContent().trim().isEmpty()) {
                continue;
            }
            System.out.print(String.format("%s=%s\t", attribute.getNodeName(), attribute.getNodeValue()));
        }
        System.out.println(System.getProperty("line.separator"));
        NodeList childNodes = node.getChildNodes();
        for (int index = 0; index < childNodes.getLength(); index++) {
            recursionReadElement(childNodes.item(index));
        }
    }

    private static String genlevelSpace(int level) {
        StringBuilder sb = new StringBuilder();
        while (--level > 0) {
            sb.append("    ");
        }
        return sb.toString();
    }

    private static int getLevel(Node node, int level) {
        return node.getNodeName().equals("#document") ? 0 : 1 + getLevel(node.getParentNode(), level + 1);
    }

    public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException {
        String file = "F:\\tmp\\waitReader.xml";
        parse(file);
    }
}
JDK自带方法解析xml特定格式的字符串 使用JDK1.6自带的方法解析XML特定格式的字符串,将压缩包中的两个java类解压到同一个目录内,导入eclipse更改包路径,直接运行test.java即可。 立即下载

相关推荐

JDK自带xml解析器dom+sax

JDK自带xml解析器dom+sax JDK自带xml解析器dom+sax JDK自带xml解析器dom+sax

1.24Java-JDK新特性、表达式、XML解析

1.24.3XML、1.24.3.1什么是XML、1.24.3.1.1作用、1.24.3.1.2XML基础语法、1.24.3.2XML组成、文档声明、指、标签、文本、1.24.3.3XML约束 1.24.3.3约束的分类 1.24.3.3.1DTD约束1.24.3.3.2Schema约束 1.24.3.4XML解析 1.24.3.4.1sax解析 1.24.3.4.2dom解析 1.24.3.4.3jdom解析 1.24.3.4.4dom4j解析

老李头喽博客 608

从零开始掌握Python机器学习:七步教程 基础篇

前言 「开始」往往是最难的,尤其是当选择太多的时候,一个人往往很难下定决定做出选择。本教程的目的是帮助几乎没有 Python 机器学习背景的新手成长为知识渊博的实践者,而且这个过程中仅需要使用免费的材料和资源即可。 第一步:基本 Python 技能 如果我们打算利用 Python 来执行机器学习,那么对 Python 有一些基本的了解就是至关重要的。 首先,你需要安装 Python。因为我们后...

hcgx2018的博客 1616

详解Java解析XML的四种方法

Java解析XML的四种方法:1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

qq_50896685的博客 1万+

电子发票二维码背后的秘密:10分钟看懂校验码、加密字符含义与防伪设计

本文深入解析电子发票二维码的结构与防伪设计,揭示校验码和加密字符的生成原理及验证方法。通过实际案例和技术细节,帮助财务人员理解电子发票的安全机制,提升防伪识别能力,确保税务合规。

weixin_29248611的博客 533

记录一次小项目中的重放攻击与解决方案

文章目录1、重放攻击简介2、重放攻击演示3、解决方案4、重放攻击验证 欢迎各位 前(提)来(出)讨(意)论(见)。 1、重放攻击简介 重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。 举个简单的小例子。 我们往系统里面插入一条数据,如果此次操作的数据包被攻击者获取,又恰巧后台没有对重复内容进行验证,那么攻击者就可以利用该数据包重复的发起请求,无限制的往数据库插入数据,即使请求包是加密的也

fiveSix 8727

JAVA解析XML(自带的工具)

Java中使用、解析XML

qq_41481761的博客 757

半桥LLC谐振变换器及同步整流MATLAB仿真(一)

LLC工作原理详细解析,工作过程详细拆解

qq_55203246的博客 3万+

java使用SAX解析器解析XML文件

SAX,也称为Simple API for XML,是jdk自带的 用于解析 XML 文档 API。它是一种基于流的解析方式,边读取XML边解析,并以事件回调的方式让调用者获取数据。因为是一边读一边解析,所以无论XML有多大,占用的内存都很小,所以 SAX 具有高效的内存管理。 三、XmlRow类 四、SAXHandler类 五、测试 输出: 参考:Parsing an XML File Using SAX ParserParsing an XML File Using StAXexcel-xml-

西凉的悲伤博客 4283

Spring Cloud 整合(一) CRUD

Springcloud 整合之 CRUDSpringcloud介绍功能概述为什么要选用Springcloud Springcloud介绍 功能概述 实现微服务 Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的某些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态)。分布式系统的协调导致样板式样,并且使用Spring Cloud开发人员可以快速站起来实现这些样板的服务和应用程序。 为什么要选用Springcloud

Kerwin-Lin的博客 1501

【ARM Coresight | AMBA BUS | Cache 与 MMU/MPU | CoreLink | GCC | CSH 专栏导读】

1. ARM Coresight(SoC-400/SoC-600) 专栏 2. ARMv8/v9 CPU/Cache 专栏 3. Linux ARM AMBA 总线 专栏 4. Trace32/DS-5 专栏。。。

CodingCos的博客 8245

编写简单的XPath程序

<br /><br />当前使用XPath 1.0<br /><br />1,需求说明 <br />假设要查询一个图书列表,寻找TEST的著作. <br /><br />2,创建项目 <br />创建一个Java项目. <br /><br />Java 1.5推出了javax.xml.xpath包,提供一个引擎和对象模型独立的XPath库.只要Java环境>1.5,无需增加类库. <br /><br />这个包也可用于Java 1.3及以后的版本,但需要单独安装Java API for XML Proces

sjj2011的专栏 1202

流体动力学仿真软件:CFX_(10).案例实践:复杂流场分析

在“Phases”选项卡中,定义参与仿真的不同相。例如,如果您要分析气液两相流,可以定义“Air”和“Water”两个相。

kkchenjj的博客 1690

Dom4j解析xml文件-递归遍历所有节点和属性

Dom4j是java中常用读取xml文件的工具,就方便性和性能方面,一定程度要优于JDK中Domcument和SAX解析的,感兴趣的童鞋可以看看这篇文章 java解析XML的四种方式及比较,相关jar包可免费下载:dom4j-1.6.1.jar,下边我就分享一下用Dom4j对xml文件进行遍历,一看代码就明白了,注释的很详细。 被测试的xml文件test.xml [java] vi

LoveStudy_girl的博客 926

Unity之如何接入NPOI 快速读取Excel

NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。 NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目

TxNet 4397

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

.net解析传过来的xml_DOM4J解析XML文件

*# 什么是解析XML?相信一些初学者回经常听到反射,解析xml文件一类的词汇,但是究竟什么是解析什么是反射呢?解析xmlwen文件解析(parser):从xml中把我们需要的数据提取出来就是xml解析.解析的分类:JDK自带方式* Dom解析* SAX解析第三方解析* Dom4J* JDOM在xml中,最终所有的标签都跟顶级标签有关系的DOM: document Object Model 文档对...

weixin_39669701的博客 145

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java文件读取

xml/text/properties文件读取

你是小新吗 392

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

使用Dom4j解析XML文件

使用Dom4j解析XML文件

junR_980218的博客 5652

Java解析XML文件(DOM4J解析xml文件)

实现通过DOM4J技术解析XML配置文件,修改xml配置信息,创建xml文件及信息。通过dom4j技术模拟解析web.xml文件的过程。

雾林小妖的博客 2834

(二)使用Dom4j对XML文件进行解析

目录1、XML解析概念2、Dom4j解析过程 1、XML解析概念 XML解析技术:   HTML和XML都是标记型文档,可以使用W3C组织制定的DOM技术来解析。(DOM把所有标签表示为对象) dom4j解析技术:   早期JDK提供了两种方式对XML进行解析,分别是DOM和SAX,目前已经不使用。 第三方解析:   dom➡jdom,   jdom➡dom4j,   pull主要用在Android手机开发,是和sax类似为事件机制解析xml文件。 2、Dom4j解析过程   使用dom4j解析XML文件,

面条有点辣 6751

XML简介与Dom4j解析XML

文章目录一.XML简介1.什么是 XML2.XML 的主要作用3.XML 与 HTML4.XML 属性5.XML语法规则二.Dom4j解析XML1.树结构与xml文件的解析技术1.1树结构1.2xml文件的解析技术2.Dom4j解析XML 一.XML简介 首先我们先简单介绍一下什么是xml,如果对这方面已有所了解的小伙伴们可以跳过标题一。 比较着急的小伙伴可以直接看标题二中的2.Dom4j解析XML 1.什么是 XML XML 指可扩展标记语言(EXtensible Markup Language) XM

MrYushiwen的博客 2055

dom4j解析xml

xml xml解析技术介绍 xml可扩展的标记性语言 不管是html文件还是xml文件,它们都是标记性文档,都可以使用w3c组织制定的 dom 技术进行解析 早期JDK为我们提供了两种xml解析技术Dom和Sax: 1) dom解析技术是w3c组织制定的,而所有的编程语言都对这个解析技术使用了自己的特点进行实现 2) sun公司在JDK5版本对dom解析技术进行升级:Sax(Simple API for xml) 第三方解析: 1) jdom在dom基础上进行了封装 2) dom4j又对jdom进行

m0_60181622的博客 4223

dom4j解析及生成XML

dom4j解析XML 1.概述 dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java X...

weixin_43611145的博客 1754

java解析xml文件

JDK API中提供了3种方式解析XML,分别为DOM、SAX、XPath。 目录: DOM XPath:Mybaties中采用XPath方式解析XML文件的配置信息。 SAX 一.DOM studentx.xml <?xml version="1.0"?> <students> <student> <name>Joh...

yiguang_820的博客 4751
上一篇: 根据数据库定义语句DDL生成实体类和Mybatis增删改查代码
下一篇: Excel文件导入&导出工具类
java_t_t
博客等级 码龄9年 171粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值