JAVA读取XML文件并解析获取元素、属性值、子元素信息
JAVA读取XML文件并解析获取元素、属性值、子元素信息
关键字
XML读取 InputStream DocumentBuilderFactory Element Node
前言
正文(直接上源码)
XML文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"> <bean name="HelloWorld" class="com.huishe.HelloWord">
<property name="textone" value="Hello World!"></property>
<property name="texttwo" value="Hello SUN!"></property>
</bean> </beans>
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.net/hua1017177499/article/details/78985166
JAVA读取XML文件并解析获取元素、属性值、子元素信息的更多相关文章
- java 读取XML文件作为配置文件
首先,贴上自己的实例: XML文件:NewFile.xml(该文件与src目录同级) <?xml version="1.0" encoding="UTF-8&quo ...
- java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .
背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...
- java读取XML文件的四种方式
java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...
- java读取 xml文件
java读取xml文件的四种方法 转自https://www.cnblogs.com/lingyao/p/5708929.html Xml代码 1 <?xml version="1. ...
- 通过Java读取xml文件内容
读取XML中的内容就需要对XML进行解析,目前对XML进行解析的方法分为四种: 下面解析的方法是DOM4J,需要下载jar包dom4j:https://dom4j.github.io/ package ...
- 用java操作XML文件(DOM解析方式)
XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...
- JAVA读取XML文件数据
XML文档内容如下: <?xml version="1.0" encoding="UTF-8"?> <root> <field t ...
- java读取XML文件,及封装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 ...
随机推荐
- APP-8.2-Postman应用
用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具.今天给大家介绍的这款网页调试工具不仅可以 ...
- APP-5-百度电子围栏
1.代码部分 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <me ...
- pycharm 直接删掉数据表之后,makemigration和migrate 之后,数据库中依然没有生成数据表的问题
综合分析一下行程这个问题的原因: 在终端中运行 select * from django_migrations; 查看 提交的记录,如果你的表删掉了,记录还在,那么数据库会觉得,这个表依然是存在的,所 ...
- Etcd源码解析(转)
7 Etcd服务端实现 7.1 Etcd启动 Etcd有多种启动方式,我们从最简单的方式入手,也就是从embed的etcd.go开始启动,最后会启动EtcdServer. 先看看etcd.go中的启动 ...
- 跨域(四)——document.domain
浏览器有一个合法的性质:一个页面可以设置document.domain为当前子域或比当前子域更高级的域.一般顶级就到了根域,如果设置为其他域,浏览器就会报权限错误. 利用这个性质,我们可以通过设置do ...
- How to Pronounce We’ll Contraction
How to Pronounce We’ll Contraction Share Tweet Share Tagged With: WILL Contractions There are severa ...
- php缩小png图片时,不损失透明色的办法
做站点时,通常要将图片缩小成合适的尺寸,jpg图片缩小比较容易,png图片如果带了透明色的话,按照jpg的方式来缩小的话,就会造成透明色损失.那么如何处理,才能保存透明色呢? 主要是利用gd库的两个方 ...
- Spring3.0学习1.2(使用annotation)
使用annotation 首先 xml文件更改 新加xslt <?xml version="1.0" encoding="UTF-8"?> < ...
- thymeleaf 的常见属性
- Kubernetes K8s
1 Kubernetes入门及概念介绍 Kubernetes(K8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.开源将Docker 看成Kubernetes内部使用的低级别组 ...