使用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格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...
随机推荐
- C++ Primer 第四版中文版
C++Primer是C++的经典教程. 开始时间:2014-08-10 完成时间:2014-08-28 学习成果:基础语法+
- 使用LNMP环境安装typecho博客的全程记录
虽然我是搞asp.net的 但是十分欣赏php,php有很多开源的博客程序 比如大名鼎鼎的Wordpress.还有各种独立博客大牛使用的z-blog,以及短小精悍的emblog. wordpress臃 ...
- Gatling:开源压力测试框架之入门
Gatling是一款开源的压力测试工具,基于Scala, Akka and Netty. 可录制测试脚本,也可以手动编写脚本,适合有编程经验的测试人员使用: 支持测试用例的参数化,可以使用csv.js ...
- C++常量const
常量折叠概念 常量折叠表面上的效果和宏替换是一样的,只是“效果上是一样的”,而两者真正的区别在于,宏是字符常量,在预编译宏替换完成后,该宏名字会消失,所有对宏的引用已经全部被替换为它所对应的值,编译器 ...
- sql_自连接,181,182,196,197
181. Employees Earning More Than Their Managers https://leetcode.com/problems/employees-earning-more ...
- 剑指offer—第二章算法之快速排序
算法:排序和查找(二分查找,归并排序,快速排序),位运算等. 查找:顺序查找,哈希查找,二叉排序树查找,哈希表. 二分查找可以解决:"旋转数组中的最小数字","数字在排序 ...
- 洛谷 P1262 间谍网络
传送门 题目大意:A能揭发B,B能揭发C..某些人可以被收买,如果收买A,那么A,B,C..的情报都可以得到. 求能否得到所有情报,如果可以最少花费多少钱去收买. 题解:tajian缩点 dfs/bf ...
- vuejs angularjs 框架的一些比较(vue项目重构四)
使用Angularjs和Vue.js对比 首先需要说明的是:现在默认angularjs指angular1.0+版本,angular默认指2.0以上版本.本文的名词也默认指定angular的1.0+版本 ...
- poj 3128 Leonardo's Notebook——思路(置换)
题目:http://poj.org/problem?id=3128 从环的角度考虑. 原来有奇数个点的环,现在点数不变: 原来有偶数个点的环(设有 k 个点),现在变成两个大小为 k/2 的环. 所以 ...
- xshell 使用密钥登录
http://blog.csdn.net/suquan629/article/details/44783377