---------------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数据的更多相关文章

  1. Java读取xml数据

    xml中的代码 <?xml version="1.0" encoding="UTF-8"?> <books id="aaa" ...

  2. Java中XML数据

    Java中XML数据 XML解析——Java中XML的四种解析方式 XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解 ...

  3. wcf序列化大对象时报错:读取 XML 数据时,超出最大

    错误为: 访问服务异常:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出 错: request.InnerException 消息是“反序 ...

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

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

  5. java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .

    背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...

  6. InnerException 消息是“反序列化对象 属于类型 *** 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。(注意细节)

    WEB站点在调用我们WCF服务的时候,只要传入的参数过长,就报如下错误: 格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: formD ...

  7. java读取XML文件的四种方式

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

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

    JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取  InputStream   DocumentBuilderFactory   Element     Node 前言 最 ...

  9. Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

    1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...

随机推荐

  1. apt-get指令的autoclean,clean,autoremove的区别

    apt-get使用各用于处理apt包的公用程序集,我们可以用它来在线安装.卸载和升级软件包等,下面列出一些apt-get包含的常用的一些工具: 工具 说明 install 其后加上软件包名,用于安装一 ...

  2. HihoCoder - 1236 Scores (五维偏序,分块+bitset)

    题目链接 题意:给定n个五维空间上的点,以及m组询问,每组询问给出一个点,求五个维度都不大于它的点有多少个,强制在线. 神仙题 单独考虑每个维度,把所有点按这个维度上的大小排序,然后分成T块,每块用一 ...

  3. BZOJ - 2460 :元素 (贪心&线性基)

    相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石.一般地,矿石越多则法力越强,但物极必反:有时,人们 ...

  4. PADS Logic 脚本的 Fields 一个对象记录

    PADS Logic 脚本的 Fields 一个对象记录 PADS Laogic 有一个非常棒的脚本功能,可以导出所以元件. 我目前是把脚本绑定到 Ctrl+S 上,在保存时自动导出 txt 文件,方 ...

  5. vc访问ACCESS数据库

    在现代软件开发中,数据库技术被越来越广泛应用,很多项目都存在着大量的数据需要存储,通常都会采用数据库来存储这些数据.最初,数据库厂商推出一个新的数据库产品时,相应的,他会为程序员提供一套访问该数据库的 ...

  6. Google Cloud VM上在线扩硬盘

    Google Cloud VM是可以在线扩展Disk的大小的. 一.创建VM和磁盘 比如我有一台VM,附加了一块Disk,大小是120GB.如下图: 在VM中进行格式化: mkfs.ext4 -F / ...

  7. 蓝桥杯 算法训练 ALGO-34 纪念品分组

    算法训练 纪念品分组   时间限制:1.0s   内存限制:256.0MB 问题描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值 相对均衡,他要把购 ...

  8. log4net生成多个日志文件

    使用Log4Net日志组件时,经常会碰到这样一种场景,我想把错误的日志记录在Error.log文件中,而把操作的日志放在Operation.log文件中 经过几番尝试,终于实现了,在此把Log4Net ...

  9. juc线程池原理(四): 线程池状态介绍

    <Thread之一:线程生命周期及五种状态> <juc线程池原理(四): 线程池状态介绍> 线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态 ...

  10. TIMEQUEST学习之黑金动力(三)

    不知不觉,学到的第四章.但是对于TQ的内部模型和外部模型的完整分析还是没有很好的理解.接着学习......... 我们也了解静态时序分析的第一步骤,亦即时钟方面的约束.此外,也稍微对 Report T ...