使用Java读取XML数据
---------------siwuxie095
工程名:TestReadXML
包名:com.siwuxie095.xml
类名:ReadXML.java
打开资源管理器,在工程 TestReadXML 文件夹下,放入
一个 XML 文件:languages.xml
languages.xml 的内容:

工程结构目录如下:

代码:
|
package com.siwuxie095.xml; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class ReadXML { /** * * 使用Java语言实现XML数据的解析 * DOM方式解析 * * @param args */ public static void main(String[] args) { //创建一个 DocumentBuilderFactory 对象,通过类调用静态方法获取一个新的实例 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); try { //通过对象 factory 调用 newDocumentBuilder() 方法,创建一个新的 DocumentBuilder //返回值是 DocumentBuilder 类型,创建对象,接收返回值 //有异常抛出,用 try catch 捕获 DocumentBuilder builder=factory.newDocumentBuilder(); //使用 builder 来创建真正的XML文档 //使用 builder 的 parse()方法,传入文件对象,返回 Document 类型 //(这里是匿名对象,使用相对路径) //创建一个 Document 对象来接收返回值 //(注意:使用 org.w3c.dom 包中的 Document 类) //有异常抛出,用 try catch 捕获 Document document=builder.parse(new File("languages.xml")); //文档创建完成后,开始读取 // //先读取根元素:languages,创建一个 Element 对象 //(注意:使用 org.w3c.dom 包中的 Element 类) //getDocumentElement() 获取文档元素即文档根元素 Element root=document.getDocumentElement(); //获取根元素的属性值 System.out.println("category="+root.getAttribute("category")); //接着读取根元素的子集元素:lan //getElementsByTagName() 的返回值是 NodeList 类型,即一个集合 //创建一个 NodeList对象接收返回值 NodeList list=root.getElementsByTagName("lan"); //创建for循环,循环打印 lan 内部的值 //循环次数使用 NodeList 的 getLength() 方法 for (int i = 0; i < list.getLength(); i++) { //创建一个 Element,调用list的item()方法, //传入下标i,按照循环次数获取list中的内容 //但item()的返回值是Node类型,是Element的父类 //父类转子类,需要进行强制转换 Element lan=(Element) list.item(i); //将 for循环中的元素分隔开 System.out.println("-------------"); //获取属性值 System.out.println("id="+lan.getAttribute("id")); //获取 lan 中的两个子节点: //name 和 ide,是两个不同的 TagName // //不建议使用下面的方法: //可以使用getElementsByTagName(),但弊端是返回的是一个集合 //两个节点即两个集合,还要从两个集合中分别取第一个值 //(因为已知一个节点只有一项) Element name=(Element) lan.getElementsByTagName("name").item(0); //获取当前节点中的文本内容(字符型数据) //System.out.println("name="+name.getTextContent()); //获取 lan 中的两个子节点,因为lan下的子节点同级,建议使用: //getChildNodes()方法,获取lan下的所有的子节点, //返回值是 NodeList 类型,创建对象接收返回值 NodeList clist=lan.getChildNodes(); for (int j = 0; j < clist.getLength(); j++) { //这里和上面不一样,如果创建Element对象并强转,会报错:类型转换错误 Node c=clist.item(j); //如果当前的节点是Element对象,才输出 //如果不判断,当前的API在打印时会把每一行后面的空白+回车、缩进符 //当做两个新节点,即获取节点时并不是只获取可见的节点, //对于不可见的数据,同样要作为一个节点读取 if (c instanceof Element) { //获取 name、ide 节点 System.out.println(c.getNodeName()+"="+c.getTextContent()); } } } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } |
运行一览:
加了 if (c instanceof Element) 判断:

不加 if (c instanceof Element) 判断:

【made by siwuxie095】
使用Java读取XML数据的更多相关文章
- Java读取xml数据
xml中的代码 <?xml version="1.0" encoding="UTF-8"?> <books id="aaa" ...
- Java中XML数据
Java中XML数据 XML解析——Java中XML的四种解析方式 XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解 ...
- wcf序列化大对象时报错:读取 XML 数据时,超出最大
错误为: 访问服务异常:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出 错: request.InnerException 消息是“反序 ...
- 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读取该 ...
- InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)
WEB站点在调用我们WCF服务的时候,只要传入的参数过长,就报如下错误: 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: formD ...
- java读取XML文件的四种方式
java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...
- JAVA读取XML文件并解析获取元素、属性值、子元素信息
JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取 InputStream DocumentBuilderFactory Element Node 前言 最 ...
- Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法
1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...
随机推荐
- Linux下Apache配置局域网访问出现的问题
在网站安装好之后,本机可以访问,但是局域网内无法访问,我查看了 /etc/httpd/conf/httpd.conf 看到我的配置如下 <Directory ......> Allow A ...
- 微软SaaS多租户解决方案
微软SaaS多租户解决方案 docs.microsoft.com/en-us/azure/sql-database/saas-tenancy-app-design-patterns https://d ...
- Spring IOC容器的初始化—(一)Resource定位
前言 上一篇博文“ Spring IOC是怎样启动的 ”中提到了refresh()方法,这个就是容器初始化的入口.容器初始化共有三个阶段: 第一阶段:Resource定位 第二阶段:BeanDefin ...
- restful规则
参考连接:https://blog.igevin.info/posts/restful-api-get-started-to-write/#url_rules https://juejin.im/po ...
- Python 函数 -next()
next() next() 返回迭代器的下一个项目. iterator - 可迭代对象. default - 可选,用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发 St ...
- Elasticsearch聚合优化 | 聚合速度提升5倍
https://blog.csdn.net/laoyang360/article/details/79253294 1.聚合为什么慢?大多数时候对单个字段的聚合查询还是非常快的, 但是当需要同时聚合多 ...
- linux(6)
第十五单元 软件包的管理 [本节内容]1. 使用RPM安装及移除软件(详见linux系统管理P374)1) 掌握RPM的定义:RPM就是Red Hat Package Manger(红帽软件包管理工具 ...
- UiAutomator viewer 在tools下启动、资源jar包在platforms下(如android22)
1.UiAutomator viewer 在tools下启动. 2.资源jar包在platforms下(如android22):android.jar/ uiautomator.jar
- juc线程池原理(四): 线程池状态介绍
<Thread之一:线程生命周期及五种状态> <juc线程池原理(四): 线程池状态介绍> 线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态 ...
- USB接线图
一.简介 通用串行总线(英文:Universal Serial Bus,简称USB)是连接外部装置的一个串口汇流排标准,在计算机上使用广泛,但也可以用在机顶盒和游戏机上,补充标准On-The-Go( ...