Java之XML解析-使用dom(org.w3c.dom)解析XML

2023-11-11

转自:

Java之XML解析-使用dom(org.w3c.dom)解析XML

下文笔者将讲述使用W3C(org.w3c.dom)提供的接口,解析XML文档的方法分享

W3C解析xml文档的方法:
  将整个xml文档读入内存,然后构建一个DOM树,然后对各节点Node进行相应的操作

Document Object简介

Document对象

Document对象:通常指整个XML的文档及其所有Node
这些节点按照一定的顺序保存在Document对象中,形成一个树形的结构
我们可以通过遍历一棵xml树,获取xml文档中所有的内容,那么这一棵树都是为Document对象

Document对象拥有以下常用方法

  1. createAttribute(String):用给定的属性名创建一个Attr对象,并可在其后使用setAttributeNode方法来放置在某一个Element对象上面。
  2. createElement(String):用给定的标签名创建一个Element对象,代表XML文档中的一个标签,然后就可以在这个Element对象上添加属性或进行其它的操作。
  3. createTextNode(String):用给定的字符串创建一个Text对象,Text对象代表了标签或者属性中所包含的纯文本字符串。如果在一个标签内没有其它的标签,那么标签内的文本所代表的Text对象是这个Element对象的唯一子对象。
  4. getElementsByTagName(String):返回一个NodeList对象,它包含了所有给定标签名字的标签。
  5. getDocumentElement():返回一个代表这个DOM树的根节点的Element对象,也就是代表XML文档根元素的那个对象。

Node对象

Node对象:代表DOM中的一个抽象节点,她是组成DOM对象的必要部分,Node对象中常见的方法如下所示:

  1. getNextSibling():返回在DOM树中这个节点的下一个兄弟节点。
  2. getPreviousSibling()方法返回其前一个兄弟节点。
  3. getNodeName():根据节点的类型返回节点的名称。
  4. getNodeType():返回节点的类型。
  5. getNodeValue():返回节点的值。
  6. hasChildNodes():判断是不是存在有子节点。
  7. hasAttributes():判断这个节点是否存在有属性。
  8. getOwnerDocument():返回节点所处的Document对象。
  9. insertBefore(org.w3c.dom.Node new,org.w3c.dom.Node ref):在给定的一个子对象前再插入一个子对象。
  10. removeChild(org.w3c.dom.Node):删除给定的子节点对象。
  11. replaceChild(org.w3c.dom.Node new,org.w3c.dom.Node old):用一个新的Node对象代替给定的子节点对象。
  12. appendChild(org.w3c.dom.Node):为这个节点添加一个子节点,并放在所有子节点的最后,如果这个子节点已经存在,则先把它删掉再添加进去。
  13. getFirstChild():如果节点存在子节点,则返回第一个子节点。
  14. getLastChild():方法返回最后一个子节点。

NodeList对象

此对象包含一个或多个Node对象,常用于检测长度及个数

  1. GetLength():返回列表的长度
  2. Item(int):返回指定位置的Node对象

Element对象

Element对象:指xml中的标签元素,继承于Node
他是Node对象的子对象,标签中包含属性,由于继承于Node,所以她也拥有Node节点中的方法
它拥有以下主要方法:

  1. getElementsByTagName(String):返回一个NodeList对象,它包含了在这个标签中其下的子孙节点中具有给定标签名字的标签。
  2. getTagName():返回一个代表这个标签名字的字符串。
  3. getAttribute(String):返回标签中给定属性名称的属性的值。在这儿需要主要的是,应为XML文档中允许有实体属性出现,而这个方法对这些实体属性并不适用。
  4. getAttributeNodes()方法来得到一个Attr对象来进行进一步的操作。
  5. getAttributeNode(String):返回一个代表给定属性名称的Attr对象。

Attr对象

Attr对象所代表的含义为:标签中的属性,她继承于Node,她只是作为Element对象的一部分,但是不作为树的单独节点

java 之Dom解析XML的步骤如下所示: 
1. 获取DocumentBuilderFactory
2. 通过DocumentBuilder工厂产生一个DocumentBuilder
3. 利用DocumentBuilder产生Document
 

例:

testXml.xml
  <?xml version="1.0" encoding="UTF-8"?>
<struts>
  <constant name="struts.i18n.encoding" value="gb2312">324</constant>
  <package name="stuts2" extends="struts-default">
       <action name="A"  >
            <result name="s">a.jsp</result>
            <result name="t">b.jsp</result>
            <result name="m">c.jsp</result>
            <result name="fail">d.jsp</result>
       </action> 
        <action name="B" >
            <result name="success">e.jsp</result>
            <result name="fail">f.jsp</result>
       </action> 
  </package>
</struts>

public class TestClass {
    public static void main(String[] args) {
        try {
            File f = new File("testXml.xml");
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//步骤1
            DocumentBuilder builder = factory.newDocumentBuilder();//步骤2
            Document doc = builder.parse(f);//步骤3
            NodeList nl = doc.getElementsByTagName("action");
            for (int i = 0; i < nl.getLength(); i++) {
                System.out.println("result:"+ doc.getElementsByTagName("result")
                        .item(i).getFirstChild().getNodeValue());            
            }
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    }
}
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java之XML解析-使用dom(org.w3c.dom)解析XML 的相关文章

  • Selector.close() 是否关闭所有客户端套接字?

    我是 nio 套接字的新手 我已经使用 nio 套接字编写了一个服务器 现在我正在尝试编写关闭钩子以确保通过清理资源正常退出 我的问题是Selector close 方法关闭所有客户端套接字 如果没有 请告诉我如何访问所有客户端套接字 而无
  • 二元运算符 >=、-、* 的错误操作数类型

    我无法弄清楚如何修复代码中不断出现的这些错误 import java util Scanner public class Unit02Prog1 public static void main String args Scanner inp
  • java中高效的输入流到字符串方法

    因此 我在 Java 中的 诚然非常简单 应用程序上运行探查器 令我惊讶的是 仅次于需要在时间上发出 HTTP 请求的方法的是我的方法 inputStreamToString方法 目前它的定义如下 public static String
  • Android Studio 与 Google Play 服务的编译问题

    我正在运行 Android Studio 0 8 4 并在 Android Studio 0 8 2 上尝试过此操作 我正在运行 Java JDK 1 8 0 11 并尝试使用 JDK 1 8 0 05 每当我尝试构建我的 android
  • 如何在正则表达式中编写可选单词?

    我想编写一个识别以下模式的 java 正则表达式 abc def the ghi and abc def ghi 我试过这个 abc def the ghi 但是 它没有识别第二种模式 我哪里出错了 abc def the ghi 删除多余
  • 使用正则表达式验证电子邮件的最大长度

    我找到了用于电子邮件验证的正则表达式 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4 我希望电子邮件的最大长度为 20 个字符 因此我将其更改为 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4
  • 是否可以使用 Apache Tika 提取表信息?

    我正在寻找 pdf 和 MS Office 文档格式的解析器 以从文件中提取表格信息 当我看到 Apache Tika 时 正在考虑编写单独的实现 我能够从任何这些文件格式中提取全文 但我的要求是提取表格数据 我希望有 2 列采用键值格式
  • 是否可以创建 Java RAM 磁盘以与 java.io.* API 一起使用?

    我正在使用一个第三方库 它基本上创建一个输出目录 其中包含不同类型的文件和子目录 我希望能够编写单元测试来确认输出正确 我希望能够将库与 RAM 磁盘一起使用 这样库所做的任何事情都不会以任何方式接触实际的磁盘板 这个想法是让测试运行和清理
  • 如何检查单词是否在wordNet中

    我开始了解wordNet直到我知道我找到了synonymous对于一个特定的词 现在我有一个文件 我想使用标记化该文本n gram例如 String s I like to wear tee shirt 使用后n gram这将是 I lik
  • 为休息服务实施 JUnit 测试

    我必须为我的休息服务实现一些 JUnit 测试 例如 这是我的休息服务之一 Path dni fe public class HelloWorld POST Path home Consumes MediaType APPLICATION
  • 如何获取 JDBC 中 UPDATE 查询影响的所有行?

    我有一项任务需要使用更新记录PreparedStatement 一旦记录被更新 我们知道更新查询返回计数 即受影响的行数 但是 我想要的不是计数 而是受更新查询影响的行作为响应 或者至少是受影响的行的 id 值列表 这是我的更新查询 UPD
  • 在约束验证器中使用 Guice 进行依赖注入

    我有一个在 ConstraintValidator 的实现中注入类的用例 我正在使用 Google guice 进行依赖项注入 目前无法在验证器内注入 我的场景的简化形式 内部模块 Provides Singleton public Ser
  • 为 REST API 生成 Swagger UI 文档

    我使用 Java 中的 JAX RS Jersey 开发了 REST API 我想为其转换 生成基于 Swagger 的 UI 文档 谁能以简单的方式告诉我如何做到这一点的精确 步骤 很抱歉 他们网站上给出的步骤对我来说有点模糊 有多种方法
  • 获取接收者的设备令牌以在 Firebase 中发送通知

    所以我正在学习如何使用 firebase 发送设备到设备的通知 我看到了这个answer https stackoverflow com a 42548586 5237289发送通知 看起来很简单 现在 我知道要获取发件人的令牌 它应该如下
  • Hybris:如何在impex中导入zip文件中的媒体?

    我知道我们可以导入未像这样压缩的图像 siteResource jar com project initialdata constants ProjectInitialDataConstants projectinitialdata imp
  • 在 Kotlin 中声明静态属性?

    My Java code public class Common public static ModelPengguna currentModelPengguna public class Common companion object v
  • log4j.properties 在 Wildfly 上无法正常工作

    我的类路径中有一个 log4j properties 文件 它位于 APP XX jar log4j properties 位置 我注意到在ear文件中我还可以在lib文件夹中找到log4j 1 2 17 jar 但无论我在 log4j p
  • 单击行内的按钮时防止触发表行 onclick 事件

    我有一个带有 ONCLICK 事件的表行 切换下面的附加数据 在其中一个行单元格内有一个按钮 单击时执行 AJAX 操作 当我单击按钮时 行的 onclick 事件也会触发 并且会发生附加数据在 AJAX 调用完成之前出现 这对我来说是一个
  • 假布尔值=真?

    我在一本书中找到了这段代码 并在 Netbeans 中执行了它 boolean b false if b true System out println true else System out println false 我只是不明白为什
  • 如何使用“路径”查询 XDocument?

    我想查询一个XDocument给定路径的对象 例如 path to element I want 但我不知道如何继续 您可以使用以下方法System Xml XPath Extensions http msdn microsoft com

随机推荐

  • Kbuild系统源码分析(四)—./scripts/Makefile.build

    版权声明 本文为CSDN博主 ashimida 的原创文章 遵循CC 4 0 BY SA版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net lidan113lidan article details
  • Machine Learning Park--EM(最大期望算法)

    9 EM算法 最大期望算法 在前面聚类的博客当中 我们简单的讲解过使用EM算法求解GMM模型的过程 这里我们对EM算法深入进行探讨 本文Github仓库已经同步文章与代码https github com Gary code Machine
  • android缓存面试,Android面试——Glide 的缓存原理

    Glide 内部是使用 LruCache 弱引用和硬盘缓存实现的 Glide 主要将缓存分为两块内存缓存和硬盘缓存 两种缓存的结合 构成了 Glide 缓存机制的核心 内存缓存skipMemoryCache true 默认是开始缓存的 如果
  • 【数据结构】二叉树、堆多图详解(TopK、堆排序)

    和光同尘 我的个人主页 应该在肩膀上长着自己的脑袋 弗拉基米尔 伊里奇 列宁 二叉树 堆的概念及应用 前言 1 数的概念及结构 1 1 树的概念 1 2 树的相关概念 1 3 数的表示 2 二叉树概念及结构 2 1 概念 2 2 特殊二叉树
  • keil_lic.exe注册机使用

    第一步 以管理员身份运行keil5 第二步 打开File中的License Management 第三步 复制CID 第四步 选择对应的Target为ARM 粘贴CID 复制生成的注册码 第五步 将注册码粘贴到这 就ok了
  • Android实现折叠式Toolbar:CollapsingToolbarLayout 使用教程与解析

    简介 在各种不同的应用中 大家可能会经常见到这样一个效果 Toolbar是透明的 有着一个背景图片以及大标题 随着页面向上滑动 其标题逐渐缩放到Toolbar上 而背景图片则在滑动到一定程度后变成了Toolbar的颜色 这种效果也即是折叠式
  • 类与类之间的关系图(Class Diagram,UML图)

    一 简介 二 类的构成 三 类之间的关系 Relationship 1 单向关联 2 双向关联 3 自身关联 4 多维关联 N ary Association 5 泛化 Generalization 6 依赖 Dependency 7 聚合
  • FlatBuffers

    概述 FlatBuffers是google最新针对游戏开发退出的高性能的跨平台序列化工具 目前已经支持C C Go Java JavaScript PHP and Python C和Ruby正在支持中 相对于json和Protocol Bu
  • 很有用的一些的Python小工具送给你

    导读 python作为越来越流行的一种编程语言 不仅仅是因为它语言简单 有许多现成的包可以直接调用 Python作为越来越流行的一种编程语言 不仅仅是因为它语言简单 有许多现成的包可以直接调用 python中还有大量的小工具 让你的pyth
  • Sql Server 日期函数

    1 一个月第一天的复制 保存Select DATEADD mm DATEDIFF mm 0 getdate 0 2 本周的星期一复制 保存Select DATEADD wk DATEDIFF wk 0 getdate 0 3 一年的第一天复
  • ceph存储 pg归置组处于stuck以及degraded状态解决方案

    由于对ceph的兴趣 我们经常自己搭建ceph集群 可能是单节点 也可能是多节点 但是经常遇到pg归置组异常状态 下面是遇到的一些情况 1 单节点的时候pg归置组unclean或者degraded 这个时候应该检查 自己是几个osd 副本数
  • BSC主网链搭建,如何在不到24小时之内同步完成?

    还是老样子 在本篇文档开始之前 大概说明一下本次BSC同步的情况 服务器环境 服务器 阿里云服务器 CPU 16核 内存 64 GB 数据盘 3T SSD 数据盘 带宽 独享 200M 区域 美国弗吉尼亚 软件环境 centos 7 9 B
  • jqGrid 常用方法和事件

    jqGrid 常用方法整理 常用方法 获取行数据 删除行数据 重新加载表格 动态设置列显示隐藏 常用事件 常用方法 获取行数据 div div 1 获取所有行数据 jqGrid getRowData 或者 var IDS jqGrid ge
  • 小型软件公司的绩效考核

    近几个月 我常和一些朋友讨论如何在小型软件公司中对软件开发人员进行绩效考核的问题 发现很多朋友都为此问题而烦恼 由于我正好在一家小型软件公司里负 责绩效考核工作 有一些成功的实践经验 所以特此在这里与大家交流一下我的心得 这些心得可能仅限于
  • 通过python构建一个区块链来学习区块链

    了解区块链Blockchains如何工作的最快方法就是构建一个区块链 你来到这里是因为 和我一样 你对加密钱币的崛起感到很兴奋 而且你想知道区块链是如何工作的 想了解它们背后的基本技术 但理解区块链并不容易 或者至少不适合我 我在密集的视频
  • Fisco-bsco 开发联盟链 账户之间的转账

    Fisco bsco 开发联盟链 账户之间的转账 参考 开发第一个区块链应用 FISCO BCOS v2 9 0 文档 fisco bcos documentation readthedocs io 前提 Fisco bcos节点开启 控制
  • 容器性能比无容器服务器,【译】容器 vs 无服务器(Serverless)

    一些历史 不久之前 开发 部署和运维还相当复杂 在一开始 运维不仅需要修补程序代码 还要支持物理机器 保持服务器 硬件与软件处于最新状态也是一项艰巨的任务 在2000年代 一个新的模型 架构即服务 IaaS 很快流行起来 IaaS提供了从第
  • OSG的控制台报错处理

    OSG报错或者出现警告怎么办 最快解决方法是查资料问人 但是都不凑效的情况下 只能分析源码了 报错信息如下 报错调用方定位 触发位置 State cpp bool State checkGLErrors StateAttribute GLM
  • JSP连接数据库

    2019 10 15 JSP连接数据库 一 连接数据库需要用到的包为mysql connector java 5 1 20 bin jar 导入包的方法有两种 1 在Java Build Path中倒导入 2 把我们需要的包拷入WEB IN
  • Java之XML解析-使用dom(org.w3c.dom)解析XML

    转自 Java之XML解析 使用dom org w3c dom 解析XML 下文笔者将讲述使用W3C org w3c dom 提供的接口 解析XML文档的方法分享 W3C解析xml文档的方法 将整个xml文档读入内存 然后构建一个DOM树