使用 JAXP 遍历节点| 学习笔记

简介: 快速学习使用 JAXP 遍历节点。

开发者学堂课程【XML入门 :使用 JAXP 遍历节点】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/37/detail/855


使用 JAXP 遍历节点

 

1、需求是把 xml 中的所有元素名称打印出来。

2、p1  是 person 的子节点,name 是 p1 的子节点,首先获取它的根节点是 person,获取 person 的子节点,以此类推,就可以用递归,递归就是自己调用自己,比如写一个方法,一个节点为它的子节点依次调用这个方法,这可以做一个便利。

3、//遍历节点,把所有元素名称打印出来

throws 它的异常

public static void listElement( ) throws Exception{

前三步没有变化,还是一样。

/*

* 1、创建解析器工厂

* 2、根据解析器工厂创建解析器

* 3、解析 xml,返回 document

*

* ====使用递归实现=====

* 4、得到根节点

* 5、得到根节点子节点

* 6、得到根节点子节点的子节点

首先前三步直接拿过来,都是一样的。

//创建解析器工厂

DocumentBuilderFactory builderFactory = DocumentBuilderFactory . newInstance();

//创建解析器

DocumentBuilder builder = builderFactory . newDocumentBuilder();

/ /得到 document

Document document = builder . parse("src/person. xml");

//编写一个方法实现遍历操作

list1( document);  鼠标放在这会有提示,直接给显示出来,点击即可。

}

换成 node,node 是 document 父接口。

/ /递归遍历的方法

private static void list1(Node node) {

//得到一层子节点

NodeList list = node .getChildNodes();属性是下面所有子节点,可以得到一层子节点,就是根节点,一层就是 person 下子节点有两个 p1,它能得到只是这两个 p1,name 得不到,p1 只能得到 name 和 age,一层子节点。

//遍历 list

for(int i=0;i<list. getLength();i++) {

//得到每一个节点

Node node1 = list. item(i);

/ /继续得到 node1 的子节点

//Node1.getChildNodes()  这样写没有意义,因为不知道它里面有多少层,这时候就可以用递归了

List1(node1);只是这里面还是要执行 getChildNodes 这个方法,只不是还可以直接来调用 list1,这就叫递归,自己来调用自己,执行的还是以上操作。

}

4、接下来打印节点的名称,可以直接来一个输出,写在的到一层子节点上面。getNodeName 名称

System.out. println(node . getNodeName()) ;

5、在遍历节点上输入 listELement() ;输入

6、看控制台上会有什么内容

#document

person

#text

p1

#text

#text

#text

age 首先标签输出来没有问题,但是多了很多其他的内容,解析会把里面的空格换行都当成内容,加了很多 #text,但是这些根本不需要,只需要元素的类型。

#text

#text

#text

p1

#text

name

#text

#text

age

#text

#text

#text

7、node.getNodeName

//判断是元素类型时候才打印

8、这个如何判断呢?看一下 node 里面有没有相关的属性或者方法,直接在jdk API 软件里输入 node 找属性和方法,找到 elenment node 就表示 elenment  就是一个元素,访问是一个 short,再看 test 里面访问也是 short ,判断两个相同它就打印,elenment node 这个属性的特点是静态,书写是类名加 elenment  node,这么判断就可以。在 testjaxp.java 输入

if(node. getNodeType() == Node.ELEMENT _NODE) {

System.out. println(node . getNodeName()) ;

}

再打印元素名称,这样再执行看一下结果,再看一下有没有 #text。

打印结果:

person

p1

name

age

p1

name

Age

这回就没有 #text,这样就完成了遍历节点。

9、总结:

遍历的方法

//递归遍历的方法

private static void 1ist1 (Node node) {

//判断是元素类型时候才打印

if (node . getNodeType() == Node . ELEMENT NODE) {

System. out. println (node . ge tNodeName () ) ;

}

//得到一层子节点

NodeList list = node .getChidNodes( );

//遍历 list

for(int i=0;i<1ist.getLength();i++) {

//得到每一个节点

Node node1 = list.item(i) ;

//继续得到 node1 的子节点

//node1.getChildNodes ()

list1 (node1) ;

}

}

getChidNodes 方法表示获取子节点,只是获取一层的节点,遍历之后的到每一个节点,这时可以递归,可以调用这个方法,直接往下写,但是这么写没有意义,直接调用就可以,需求时打印出里面所有标签的名称,所以要做一个判断,判断它的类型,元素或标签类型,这时它才打印,如果不这么判断,它会把里面所以的元素,就是空格换行都打印出来,这时就需要做这么一个判断,这就是使用 jaxp 遍历节点的操作。

相关文章
|
网络架构 网络协议
如何查看路由器的mac和计算机的mac
如何查看路由器的mac和计算机的mac 一、查看路由器的mac     方法一: 直接看路由器的背面,如下图,即可看到MAC地址   打开命令提示符窗口,输入ipconfig,找到网关地址,如192.168.1.1 3 再在命令提示符窗口中输入 arp -a 找到对应的ip地址 192.168.1.1 后的地址即为无线路由MAC地址     二、查看计算机的mac       cmd命令窗口中输入ipconfig/all命令即可查看。
3969 0
|
4月前
|
机器学习/深度学习 存储 并行计算
【无人机】基于MPC的无人机路径规划研究(Matlab代码实现)
【无人机】基于MPC的无人机路径规划研究(Matlab代码实现)
424 6
|
4月前
|
数据采集 存储 Rust
Rust爬虫实战:用reqwest+select打造高效网页抓取工具
在数据驱动时代,本文详解如何用Rust构建高效稳定爬虫系统。基于reqwest与select库,以books.toscrape.com为例,演示HTTP请求、HTML解析、分页抓取及数据存储全流程,涵盖同步与异步实现、反爬应对及性能优化,助你掌握Rust爬虫开发核心技能。
192 2
|
数据中心
|
12月前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
202308 16
对话 | ECS如何构筑企业上云的第一道安全防线
基于Adaboost模型的数据预测和分类matlab仿真
AdaBoost(Adaptive Boosting)是一种由Yoav Freund和Robert Schapire于1995年提出的集成学习方法,旨在通过迭代训练多个弱分类器并赋予分类效果好的弱分类器更高权重,最终构建一个强分类器。该方法通过逐步调整样本权重,使算法更关注前一轮中被误分类的样本,从而逐步优化模型。示例代码在MATLAB 2022A版本中运行,展示了随着弱分类器数量增加,分类错误率的变化及测试数据的分类结果。
494 13
|
12月前
|
机器学习/深度学习 人工智能 分布式计算
《Java 与 Deeplearning4j:开启深度学习高效训练之旅》
在当今科技飞速发展的时代,深度学习无疑是人工智能领域的一颗璀璨明珠。Java 与 Deeplearning4j 框架的结合,为开发者开辟了深度学习的新路径。本文深入探讨如何在 Java 中高效使用 Deeplearning4j 进行模型训练,涵盖框架概述、数据准备、模型构建、训练及评估调优等环节,助力开发者构建高性能的深度学习应用。
418 9
|
传感器 Cloud Native 物联网
Micronaut在物联网中的应用探索:轻盈架构赋能万物互联新时代
【9月更文挑战第6天】Micronaut是一个现代、轻量级的Java框架,以其高效、易用及对云原生环境的支持,在物联网开发中展现出独特优势。它通过AOT编译技术优化应用,减少内存消耗,适合资源受限的设备。Micronaut支持反应式编程和HTTP/2,提升并发处理能力和网络传输效率。本文通过一个温度传感器数据收集服务的例子,展示了如何利用Micronaut简化物联网应用开发,使其成为该领域的理想选择。
312 3
|
Python
深入理解Python中的类方法、类实例方法和静态方法
深入理解Python中的类方法、类实例方法和静态方法
451 0
|
设计模式 JavaScript 开发者
Vue设计模式:工厂模式
Vue设计模式:工厂模式