使用 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 遍历节点的操作。

相关文章
|
26天前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
|
2月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
|
1月前
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树
CAP 理论 —最通俗易懂的解释
CAP 理论是分布式系统的一个基础理论,它描述了任何一个分布式系统最多只能满足以下三个特性中的两个: 1:一致性(Consistency) 2:可用性(Availability) 3:分区容错性(Partition tolerance) CAP 理论听起来十分抽象,本文尝试以生活中的例子并用通俗易懂的语言来解释 CAP 理论的含义。
2359 0
|
4月前
|
机器学习/深度学习 人工智能 运维
智能化运维:未来技术趋势与挑战
随着信息技术的飞速发展,智能化已成为推动运维领域进步的重要力量。本文将深入探讨智能化运维的核心技术、面临的挑战以及未来的发展趋势。通过分析当前运维自动化的实践案例和智能算法的应用,揭示智能化运维如何优化系统性能、提高资源利用率,并预测其对未来IT基础设施的影响。文章旨在为读者提供对智能化运维全面而深入的理解,并为运维专业人士指出未来发展的方向。
272 0
|
6月前
|
Java Maven
IDEA Maven SpringBoot配置POM文件
IDEA Maven SpringBoot配置POM文件
250 0
|
XML 数据格式 开发者
使用 JAXP 删除节点| 学习笔记
快速学习使用 JAXP 删除节点。
|
XML 数据格式 开发者
使用 JAXP 修改节点| 学习笔记
快速学习使用 JAXP 修改节点。
|
6月前
|
JavaScript API 开发者
【HarmonyOS 4.0 应用开发实战】ArkTS 快速入门
【HarmonyOS 4.0 应用开发实战】ArkTS 快速入门
781 0
|
IDE 前端开发 安全
使用xpath定位遇到的坑
使用xpath定位遇到的坑
235 0