Java讀取XML實(shí)現(xiàn)過(guò)程(DOM方式)
更新時(shí)間:2025年11月20日 16:08:09 作者:誠(chéng)??
文章介紹了如何使用Java的DOM方式讀取XML文件,并詳細(xì)說(shuō)明了讀取過(guò)程中需要注意的事項(xiàng),如文件路徑、節(jié)點(diǎn)層級(jí)和屬性值的獲取方式,作者通過(guò)一個(gè)示例代碼展示了如何實(shí)現(xiàn)XML的讀取,并總結(jié)了自己的經(jīng)驗(yàn),希望對(duì)讀者有所幫助
Java讀取XML(DOM方式)
1、demo.xml文件內(nèi)容
<?xml version="1.0" encoding="UTF-8"?> <Model> <user> <id Value="123">1</id> <userName>18888222111</userName> <passWord>2231231</passWord> <propertyes> <property Name="name" Value="張三" /> <property Name="age" Value="28" /> <property Name="sex" Value="男" /> </propertyes> </user> <user> <id>2</id> <userName>17888222111</userName> <passWord>3231231</passWord> <propertyes> <property Name="name" Value="張三22" /> <property Name="age" Value="23" /> <property Name="sex" Value="男" /> </propertyes> </user> <user> <id>3</id> <userName>197888222111</userName> <passWord>14231231</passWord> <propertyes> <property Name="Name" Value="張三33" /> <property Name="age" Value="21" /> <property Name="sex" Value="男" /> </propertyes> </user> </Model>
注意事項(xiàng):
- 1、注意下xml所在包路徑
- 2、里面每一層都可以理解為一個(gè)節(jié)點(diǎn),讀取時(shí)一直在對(duì)節(jié)點(diǎn)操作
- 3、注意當(dāng)前讀取節(jié)點(diǎn)的層數(shù),目前是第幾層節(jié)點(diǎn)
- 4、當(dāng)前節(jié)點(diǎn)是以屬性的方式設(shè)置的value還是在標(biāo)簽中間賦值
2、java代碼
package com;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
/**
* @Author: wangxingcheng
* @DateTime: 2022/6/25 17:48
* @Description: 使用dom讀取XML里面數(shù)據(jù)
*/
public class ReadXML {
public static void main(String[] args) {
readXML();
}
//解析XML數(shù)據(jù)
public static void readXML(){
try{
// 創(chuàng)建解析器工廠
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = factory.newDocumentBuilder();
// 創(chuàng)建一個(gè)Document對(duì)象 設(shè)置XML位置
Document doc = db.parse("src/com/xml/demo.xml");
//獲取xml中Model節(jié)點(diǎn)
NodeList modelList = doc.getElementsByTagName("Model");
System.out.println("查詢(xún)Model節(jié)點(diǎn)有幾個(gè)========="+modelList.getLength());
//循環(huán)modelList節(jié)點(diǎn),獲取modelList里面的其他節(jié)點(diǎn)
for(int i = 0 ; i < modelList.getLength() ; i++){
Node model = modelList.item(i);
System.out.println("model ================"+model);
//獲取model節(jié)點(diǎn)的子節(jié)點(diǎn),上圖可以看出model的子節(jié)點(diǎn)是user節(jié)點(diǎn)
NodeList userNodes = model.getChildNodes();
for(int j = 0 ; j < userNodes.getLength() ; j++){
//獲取到user節(jié)點(diǎn),循環(huán)取出每個(gè)user節(jié)點(diǎn)
Node user = userNodes.item(j);
//獲取user節(jié)點(diǎn)的所有子節(jié)點(diǎn)集合里面有id、userName、passWord、propertyes節(jié)點(diǎn)
NodeList childNodes = user.getChildNodes();
for(int k = 0 ; k < childNodes.getLength() ; k++){
// 區(qū)分,去掉空格和換行符
if (childNodes.item(k).getNodeType() == Node.ELEMENT_NODE) {
//獲取到有屬性的節(jié)點(diǎn)了,打印看下是不是想要的id、userName、passWord、propertyes節(jié)點(diǎn)值和屬性
Node node = childNodes.item(k);
System.out.print("屬性名=========:" + node.getNodeName());
//xml根節(jié)點(diǎn)設(shè)值的位置將會(huì)決定他取值的不同
// 1、<id>123</id> 這種取值方式需要使用 .getTextContent() 方法才可以取到值
System.out.println("屬性值=========:" + node.getTextContent());
// 第二種就是<property Name="Name" Value="張三" />這種寫(xiě)法的取值
//屬性名=========:propertyes屬性值=========:剛打印了下這里面每值,原因是這個(gè)節(jié)點(diǎn)本身沒(méi)有值,切包含了其他節(jié)點(diǎn)
//這里做一手判斷
if(node.getNodeName().equals("propertyes")){//這里再取里面節(jié)點(diǎn)的屬性值,也是第二種取值方式
//獲取propertyes里面的屬性
NodeList propertyNodeList = node.getChildNodes();
for (int g = 0 ; g < propertyNodeList.getLength() ; g++) {
// 區(qū)分,去掉空格和換行符
if (propertyNodeList.item(g).getNodeType() == Node.ELEMENT_NODE) {
Node propertye = propertyNodeList.item(g);
//第二種取值方式來(lái)了,這個(gè)看圖片很明顯他把值都設(shè)置在對(duì)應(yīng)的屬性里面了,獲取當(dāng)前propertye節(jié)點(diǎn)的所有屬性
NamedNodeMap attributes = propertye.getAttributes();
//<property Name="name" Value="張三" /> .getNodeValue()用來(lái)去屬性里面設(shè)置的值
Node name = attributes.item(0);//表示第一個(gè)屬性Name
Node value = attributes.item(1);//表示第二個(gè)屬性Value
System.out.println("property的name值======"+name.getNodeValue());
System.out.println("property的value值======"+value.getNodeValue());
}
}
}
}
}
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}
執(zhí)行結(jié)果:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis超級(jí)強(qiáng)大的動(dòng)態(tài)SQL語(yǔ)句大全
MyBatis的動(dòng)態(tài)SQL是基于OGNL表達(dá)式的,它可以幫助我們方便的在SQL語(yǔ)句中實(shí)現(xiàn)某些邏輯,下面這篇文章主要給大家介紹了關(guān)于Mybatis超級(jí)強(qiáng)大的動(dòng)態(tài)SQL語(yǔ)句的相關(guān)資料,需要的朋友可以參考下2022-05-05
MybatisPlus查詢(xún)條件為空字符串或null問(wèn)題及解決
這篇文章主要介紹了MybatisPlus查詢(xún)條件為空字符串或null問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
Springboot關(guān)于@Configuration的用法解讀
本文總結(jié)了Spring框架中@configuration注解的用法,包括基本說(shuō)明、使用場(chǎng)景、與@Component、@Profile等注解的結(jié)合使用、@import與@importresource的區(qū)別、@lazy的作用等,通過(guò)示例代碼詳細(xì)介紹了如何使用@Configuration進(jìn)行基于注解的配置2026-04-04
詳解Spring MVC3返回JSON數(shù)據(jù)中文亂碼問(wèn)題解決
本篇文章主要介紹了Spring MVC3返回JSON數(shù)據(jù)中文亂碼問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01

