Java如何使用JDOM解析XML呢?

2023-10-30

转自:

Java如何使用JDOM解析XML呢?

下文笔者讲述使用JDOM解析XML的方法分享,如下所示:

JDOM简介

JDOM是一个开源项目
它基于树形结构
使用Java代码对XML文档实现解析、生成、序列化及多种操作

 JDOM与DOM非常类似
它是处理XML的纯JAVA API
 API大量使用了Collections类,且JDOM仅使用具体类而不使用接口
JDOM 它自身不包含解析器。它通常使用 SAX2 解析器来解析和验证输入 XML 文档 

JDOM定义

JDOM中JAXP是用于XML语法分析的Java API,包含以下包信息:

  1. org.w3c.dom W3C推荐的用于XML标准文档对象模型的Java工具。
  2. org.xml.sax 用于对XML进行语法分析的事件驱动的简单API。
  3. javax.xml.parsers 工厂化工具,允许应用程序开发人员获得并配置特殊的语法分析器工具,JDOM能够替换

JDOM解析xml步骤

1.建立解析器
SAXBuilder sb=new SAXBuilder();
//返回Document文档
Document doc=sb.build(new FileInputStream(XmlFname));
2. DOM处理
元素基于Content类.Element类操作同Dom.详见Java XML解析 - 利用dom(org.w3c.dom)解析XML 
3. DOM结果处理(输出/保存)
Format fo=Format.getCompactFormat();//取得输出格式Format
//fo.setEncoding("GB2312");
XMLOutputter outputter=new XMLOutputter(fo);
FileWriter write=new FileWriter(XmlFname);//这里可以是PrintWriter形式的(任何Writer流).
outputter.output(doc,write/*Writer流,见构造函数*/);
write.close();

例:
JDOM解析xml例子

//xml文件
<?xml version="1.0" encoding="UTF-8"?>        
<AirPortLine>        
    <line lid="MU2480" num="3">        
        <id>1</id>        
        <station>        
            <sid>1</sid>        
            <sname>武汉</sname>        
        </station>        
        <station>        
            <sid>2</sid>        
            <sname>石家庄</sname>        
        </station>        
        <station>        
            <sid>3</sid>        
            <sname>北京</sname>        
        </station>        
    </line>        
    <line lid="MU2483" num="4">        
        <id>2</id>        
        <station>        
            <sid>1</sid>        
            <sname>重庆</sname>        
        </station>        
        <station>        
            <sid>2</sid>        
            <sname>武汉</sname>        
        </station>        
        <station>        
            <sid>3</sid>        
            <sname>上海</sname>        
        </station>        
        <station>        
            <sid>4</sid>        
            <sname>东京</sname>        
        </station>        
    </line>        
    <line lid="MU2485" num="2">        
        <id>3</id>        
        <station>        
            <sid>1</sid>        
            <sname>上海</sname>        
        </station>        
        <station>        
            <sid>2</sid>        
            <sname>纽约</sname>        
        </station>        
    </line>        
</AirPortLine>
//解析XML testJDOM.java
public class testJDOM {  
    public static void main(String[] args) {  
        try {  
            File file = new File("AirPortLine.xml");  
            SAXBuilder builder = new SAXBuilder();  
            Document doc = builder.build(file);  
  
            parseJDOM(doc);// 解析XML文档  
  
        } catch (Exception e) {  
            System.out.println("Can't read the file");  
        }  
    }  
  
    // 解析XML文档  
    private static void parseJDOM(Document doc) {  
        Element root = doc.getRootElement();  
        List lineList = root.getChildren("line");// 也可使用root.getChildren()  
        for (Iterator iter = lineList.iterator(); iter.hasNext();) {  
            Element lineElement = (Element) iter.next();// 获取<line>元素  
  
            String lid = lineElement.getAttributeValue("lid");// 获取<line>元素的lid属性值  
            String num = lineElement.getAttributeValue("num");// 获取<line>元素的num属性值  
  
            System.out.println("==lid:" + lid);  
            System.out.println("==num:" + num);  
  
            Element idElement = lineElement.getChild("id");// 获得<line>下<id>标签下的子元素  
            String id = idElement.getText();// // 获得<line>下<id>标签下的子元素值  
            System.out.println("==路线id:" + id);  
  
            List stationList = lineElement.getChildren("station");// 获得<line>下<station>列表  
            for (Iterator subIter = stationList.iterator(); subIter.hasNext();) {  
                Element stationElement = (Element) subIter.next();// 获取<station>元素  
  
                Element sidElement = stationElement.getChild("sid");// 获得<station>下<sid>标签下的子元素  
                Element snameElement = stationElement.getChild("sname");// 获得<station>下<sname>标签下的子元素  
                String sid = sidElement.getText();// 获得<station>下<sid>标签下的子元素值  
                String sname = snameElement.getText();// 获得<station>下<sname>标签下的子元素值  
  
                System.out.println("==路线sid:" + sid);  
                System.out.println("==路线sname:" + sname);  
            }  
        }  
    }  
}  
JDOM注意事项: 
  JDOM对象中,XML元素就是Element的实例
   XML属性就是Attribute的实例
   XML文档本身就是Document的实例
-------------------------------------------------------------
JDOM对象就是像Document、Element和Attribute这些类的直接实例
  创建JDOM对象,直接使用new操作符即可 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java如何使用JDOM解析XML呢? 的相关文章

随机推荐

  • QTHelprModule.dll 是什么

    QTHelperModule dll 是一个 Windows 平台上的动态链接库 DLL 文件 它通常是某些软件的一部分 用于执行特定的功能和服务 该文件可能包含代码 资源和数据 可以被其他应用程序调用 以实现不同的功能 如果您的系统出现了
  • 物联网:用python调入机器学习分析物联网数据入侵检测模块

    要使用Python调用机器学习分析物联网数据入侵检测模块 您需要以下步骤 安装Python和相关的机器学习库 如scikit learn pandas numpy等 您可以使用pip命令来安装这些库 准备输入数据 这些数据可以是来自物联网设
  • CentOS7 使用minikube 搭建kubernetes 学习环境

    Windows 10 系统 VirtualBox 6 0 x CentOS7启动在虚拟机上 先要安装docker 官网 https docs docker com engine install 有guide 一步步下来很简单 不多说了 按照
  • Python 之 格式化输出

    欢迎大家扫码关注我的微信公众号 Python 格式化输出 目录 一 为何需要进行格式化输出 二 格式化输出的几种方式 2 1 使用 进行格式化 2 1 1 字符串的格式化 2 1 2 浮点数的格式化 2 2 使用 format 进行格式化
  • DFRobot新推出一款适合短时间环境数据记录的Gravity 串口数据记录器

    著名开源硬件商DFRobot新推出一款Gravity 串口数据记录器 适用于做科学记录或短时间环境数据记录 Gravity 串口数据记录器产品特性 1 Gravity 串口数据记录器相比 MicroSD卡 读卡器模块存储数据 可以更方便的存
  • Gradle编译失败问题汇总

    Gradle编译失败问题汇总 问题1 Could not resolve org springframework boot spring boot gradle plugin 3 0 0 A problem occurred configu
  • canonical raft源码编译

    canonical raft源码编译 一 下载源码 二 安装环境 三 编译 四 问题报错 五 总结 一 下载源码 https codeload github com canonical raft tar gz refs tags v0 11
  • 自建代码托管平台 Gitlab 的使用说明(二)常用命令

    一 运维管理排查 查看版本 cat opt gitlab embedded service gitlab rails VERSION 检查gitlab gitlab rake gitlab check SANITIZE true trace
  • opencv 学习代码整理

    1 load image import cv2 import numpy as npfrom matplotlib import pyplot as plt img cv2 imread watch jpg cv2 IMREAD GRAYS
  • three.js实现vr全景图(vue)

    方法 可以利用Threejs中的立方体或者球体实现全景图功能 把立方体或球体当成天空盒子 将无缝衔接的图片贴上 看起来就像在一个场景中 相机一般放置在中央 three js中文网 1 立方体实现 立方体6个面要贴上6个方向的图片 这6个图片
  • 【前端八股文】vue系列:vue的优点和特点、生命周期、ref、$nextTick

    文章目录 vue的优点和特点 双向数据绑定 虚拟DOM 组件化 生命周期 十个阶段 相关功能 题外话 数据请求在created和mouted的区别 ref nextTick 参考 本系列目录 前端八股文 目录总结 是以 代码随想录 八股文为
  • cut、tee、split、xargs、bc命令

    http sss721 blog 163 com blog static 10170119200992811123802 一 cut命令 cut 主要的用途在于将一行里面的数据进行分解 最常使用在分析一些数据或文字数据的时候 这是因为有时候
  • public、private、protected、internal的区别

    public private protected internal和protected internal都是C 中的访问控制修饰符 用于修饰类或者成员的可访问性级别 public 表示同一程序集中的任何其他代码或者引用该程序集中的其它程序集
  • WiFi station模式:wpa_supplicant 工具 wpa_cli 使用

    首先需要启动wpa supplicant 指定wlan0的路径 wpa supplicant d Dnl80211 iwlan0 c etc config wifi wpa supplicant conf 搜索附近网络功能 no ok wp
  • 怎么在edge浏览器下载扩展(插件)

    1 点击浏览器右上角的三个点 找到扩展点进去 2 如果安装过插件 此刻右上角的扩展按钮会弹出安装好的插件信息 如下图 点击 打开Microsoft Edge 加载项 进入微软edge扩展商店 3 没有安装过插件的 会跳到管理扩展界面 如下图
  • 并行程序模拟(ACM/ICPC World Finals 1991)

    附上题目连接 concurrency simulator 本题为紫书数据结构基础篇第一道例题 是一道考察双端队列的模拟题 由于使用了STL 题目的难度和编程量大大降了下来 不过本菜鸟还是花了三个半小时才拿下了这道题 30msAC 可想见代码
  • 创建第一个quick工程

    参考博客 QML入门教程 1 Qt Quick与QML介绍 令狐掌门的博客 CSDN博客 qml教程 控件布局似乎是在main qml中进行实现的 所以在main qml中加入以下代码 import QtQuick 2 15 import
  • 深入理解Solidity——Assert, Require, Revert 和 Exceptions

    Assert Require Revert 和 Exceptions Solidity使用state reverting异常来处理错误 这种异常将回滚当前调用 及其所有子调用 状态的所有变化 并将错误标志给调用者 函数assert和requ
  • QImage的save函数保存的bmp图像无法打开

    最近在VS2010中用QT写一个小的程序 现在出现了一个问题实在不知道怎么解决 用save功能可以得到一个 bmp文件 但是不能读取这个图片的内容 而且每次截图图片的大小都是150K不变 整个调试过程都没有报错 相关代码如下 以上内容设置了
  • Java如何使用JDOM解析XML呢?

    转自 Java如何使用JDOM解析XML呢 下文笔者讲述使用JDOM解析XML的方法分享 如下所示 JDOM简介 JDOM是一个开源项目 它基于树形结构 使用Java代码对XML文档实现解析 生成 序列化及多种操作 JDOM与DOM非常类似