JAVA读取XML文件并解析获取元素、属性值、子元素信息

关键字

XML读取  InputStream   DocumentBuilderFactory   Element     Node

前言

最近在学习Spring源码时,碰到读取XML配置文件的方法,整理下,备忘并和大家分享

正文(直接上源码)

XML文件

XMLParse解析源码

package com.huishe.testOfSpring;

import java.io.FileInputStream;

import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

public class XMLParse {

public static void main(String[] args) throws Exception {

//1-获取XML-IO流

InputStream xmlInputStream = getXmlInputStream("xml/tinyioc.xml");

//2-解析XML-IO流 ,获取Document 对象,以及Document对象 的根节点

Element rootElement = getRootElementFromIs(xmlInputStream);

//3~5-从根元素解析得到元素

parseElementFromRoot(rootElement);

//控制台输出:

//name == HelloWorld

//className == com.huishe.HelloWord

//propertyEle: name == textone

//propertyEle: value == Hello World!

//propertyEle: name == texttwo

//propertyEle: value == Hello SUN!

}

//1-获取XML-IO流

private static InputStream getXmlInputStream(String xmlPath){

InputStream inputStream = null;

try {

//1-把要解析的 XML 文档转化为输入流,以便 DOM 解析器解析它

inputStream= new FileInputStream(xmlPath);

} catch (Exception e) {

e.printStackTrace();

}

return inputStream;

}

//2-解析XML-IO流 ,获取Document 对象,以及Document对象 的根节点

private static Element getRootElementFromIs(InputStream inputStream) throws Exception {

if(inputStream == null){

return null;

}

/*

* javax.xml.parsers 包中的DocumentBuilderFactory用于创建DOM模式的解析器对象 ,

* DocumentBuilderFactory是一个抽象工厂类,它不能直接实例化,但该类提供了一个newInstance方法 ,

* 这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回。

*/

//2-调用 DocumentBuilderFactory.newInstance() 方法得到创建 DOM 解析器的工厂

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

//3-调用工厂对象的 newDocumentBuilder方法得到 DOM 解析器对象。

DocumentBuilder docBuilder = factory.newDocumentBuilder();

//4-调用 DOM 解析器对象的 parse() 方法解析 XML 文档,得到代表整个文档的 Document 对象,进行可以利用DOM特性对整个XML文档进行操作了。

Document doc = docBuilder.parse(inputStream);

//5-得到 XML 文档的根节点

Element root =doc.getDocumentElement();

//6-关闭流

if(inputStream != null){

inputStream.close();

}

return root;

}

//3-从根元素解析得到元素

private static void parseElementFromRoot(Element root) {

NodeList nl = root.getChildNodes();

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

Node node = nl.item(i);

if (node instanceof Element) {

Element ele = (Element) node;

//4-从元素解析得到属性值

getDataFromElement(ele);

//5-从元素解析特定子元素并解析(以property为例)

getCertainElementFromParentElement(ele);

}

}

}

//4-从元素解析得到属性值

private static void getDataFromElement(Element ele) {

String name = ele.getAttribute("name");//根据属性名称读取属性值

System.out.println("name == " + name);

String className = ele.getAttribute("class");

System.out.println("className == " + className);

}

//5-从元素解析特定子元素并解析(以property为例)

private static void getCertainElementFromParentElement(Element ele) {

NodeList propertyEleList = ele.getElementsByTagName("property");//根据标签名称获取标签元素列表

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

Node node = propertyEleList.item(i);

if (node instanceof Element) {

Element propertyEle = (Element) node;

String name = propertyEle.getAttribute("name");

System.out.println("propertyEle: name == " + name);

String value = propertyEle.getAttribute("value");

System.out.println("propertyEle: value == " + value);

}

}

}

}

总结

读取XML配置涉及到IO、DocumentBuilderFactory、Node等概念,这里只使用,不具体分析

参考文献

1- https://blog.csdn/hua1017177499/article/details/78985166

java 读取XML文件作为配置文件

首先,贴上自己的实例: XML文件:NewFile.xml(该文件与src目录同级) <?xml version="1.0" encoding="UTF-8&quo ...

java读取XML文件的四种方式

java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?>

java读取 xml文件

java读取xml文件的四种方法  转自https://wwwblogs/lingyao/p/5708929.html Xml代码 1 <?xml version="1. ...

通过Java读取xml文件内容

读取XML中的内容就需要对XML进行解析,目前对XML进行解析的方法分为四种: 下面解析的方法是DOM4J,需要下载jar包dom4j:https://dom4j.github.io/ package ...

用java操作XML文件&lpar;DOM解析方式&rpar;

XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...

JAVA读取XML文件数据

XML文档内容如下: <?xml version="1.0" encoding="UTF-8"?>

java读取XML文件&comma;及封装XML字符串

package com.yyl.text; import java.io.FileInputStream; import java.util.ArrayList; import org.junit.T ...

【Java】XML文件的解析

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

随机推荐

Construct Bounding Sphere

点集的包围球 http://en.wikipedia/wiki/Bounding_sphere http://blogs.agi/insight3d/index.php/2008/02 ...

thinkphp-许愿墙-3

用jquery写异步传递的时候, 首先要判断表单中的输入是否为空: 如果有多个输入项, 应该, 分别的, 一步一步的来判断是否为空, 而不是用 and / or来复合判断! 同时如果为空, 应该将它设 ...

c&num; 作业2

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

StringUtils中 isNotEmpty 和isNotBlank的区别【java字符串判空】

isNotEmpty(str)等价于 str != null && str.length > 0 isNotBlank(str) 等价于 str != null &&am ...

js的语句

1.语句类型总结 var box = 100;//单行语句 { //用花括号包含的语句集合,叫做复合语句,单位一个 //一对花括号,表示一个复合语句,处理时,可以单做一条单行语句, //复合语句,我们 ...

Java:异常的处理

异常分两种大的异常类型,运行时异常和受检查异常. 用户既可以使用系统的异常类来处理异常信息,也可以创建系统的异常类的子类来自定义异常,这种方式比较灵活,虚拟机可以报出自己设置的异常信息,清楚明白. 1 ...

U盘FAT32文件系统

一.FAT文件系统分为四个部分 参考别人的博客 1.http://blog.163/ourhappines@126/blog/static/121363154201311811495492/ ...

ArcGIS Server 10&period;2 实战(二)动态修改要素数据的地理处理服务

上一篇介绍了如何用JSON转要素的地理处理服务,实现了动态创建点要素并加载到 ...

FZU 2140 Forever 0&period;5

Problem 2140 Forever 0.5 Accept: 36    Submit: 113    Special JudgeTime Limit: 1000 mSec    Memory ...

如何在js文件中实现获取request&period;getCotextPath&lpar;&rpar;&semi;

我们在jsp中可以方便的使用“request.getCotext()”来获取工程的根目录. 但是如果我们的js代码存在一个单独的js文件中,这时候再想获取根目录,我们就要自己截取了.可以采用下面的方式 ...

更多推荐

java xml 获取属性值_JAVA读取XML文件并解析获取元素、属性值、子元素信息