使用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格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...
随机推荐
- mac root
我在mac下,用su登录root用户 但是提醒 su:Sorry 然后按照网上的方法弄了好多次,都没成功,说是要修改/etc/group 文件中,wheel后添加自己的用户名,用逗号分隔多个用户, ...
- LINUX 命令—netstat [简单实用]
1.--当我们在检查程序是否启动或者网络状况的时候 会查看本机活跃的端口,就需要这个命令: |--"netstat – Print network connections, routing ...
- VC++ windows开机自启动设置
设置开机启动 很多软件要求软件能够在开机时自启动,下面讲讲如何设置开机自启动. Windows设置程序的开机启动的方法有很多,这里只讲其中的一种,该方法同时适用于32位和64位的操作系统,只需将需要开 ...
- Cocos2d-x -自己定义动作 圆周运动
原文地址:http://blog.csdn.net/u012945598/article/details/17605409 在之前的文章中我们以前讲过Cocos2d-x中的各种动作的用法,我们先来简单 ...
- Linux下搭建 NFS
一.NFS简介 NFS是Network File System的缩写,即网络文件系统.一种使用于分散式文件协定,有SUN公司开发.功能是通过网络让不同的机器.不同的操作系统能够分享个人数据,让应用程序 ...
- js生成1~100随机数
(function (min,max){ var range = max - min; var rand = Math.random(); var num = min + Math.round(ran ...
- bzoj 2946 [Poi2000]公共串——后缀自动机
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 对每个串都建一个后缀自动机,然后 dfs 其中一个自动机,记录同步的话在别的自动机上走 ...
- MySQL中的交并差
Mysql只提供了并集(union),没有提供差集,和交集,但是我们可以用union来实现交和差,下面即是实现方式: 首先创建两个表: ERROR 1064 (42000): mysql> cr ...
- debian下ror新建项目报错解决
一个是缺少mysql的开发包 sudo apt-get install libmysqld-dev 还有一个报错如下 debian ExecJS::RuntimeUnavailable: Could ...
- FTP协议完全详解
1. 介绍 FTP的目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据.虽然我们也可以手工使用它,但是它的主要作用是供程序使用的.在阅读本文之前最好能够阅读TC ...