XML解析

1.xml

####1.1 什么是xml文件

以标签的形式存储的文件,后缀为xml

常用语法

<beans><bean id="类名" class="类签名"></bean></beans>

1.2.xml文件的用途

和json(相同), xml文件也是用于前后台交互中用于数据传递的方式

JSON:是一个轻量级的数据集框架,是存在于前端中的一个对象,存储形式是以键值对的形式进行存储的;

xml:(所有的属性及值虽然也是以键值对的形式存在的,但是需要以标签的格式进行匹配),内容过多的时候会导致整个文件的大小偏大,会影响解析的效率;但是目前的大多数框架使用xml做配置文件

1.3.xml文件的四种解析方式

DOM:优点是直观好理解,缺点是DOM解析需要一次性的解析整个xml文件,容易出现内存溢出

SAX:采用事件驱动,内存消耗小,无法同时访问多处不同的数据

DOM4J:是JDOM的智能分支,灵活好用,开源

JDOM:大量使用了Collections类,贴合java的API

2. DOM解析

xml文件名:item.xml
<beans><bean id="items" class="cn.yunhe.beans.Item"></bean><bean id="items2" class="cn.yunhe.beans.Item"></bean><bean id="items3" class="cn.yunhe.beans.Item"></bean>
</beans>

实体类


public class Item {private String itemName;private double price;public Item() {}public Item(String itemName) {super();this.itemName = itemName;}public void show(String s) {System.out.println(s);}public Item(String itemName, double price) {super();this.itemName = itemName;this.price = price;System.out.println(itemName+price);}public String getItemName() {return itemName;}public void setItemName(String itemName) {this.itemName = itemName;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Item [itemName=" + itemName + ", price=" + price + "]";}}

解析方法

public static void domParseMethod() {//先去创建一个工厂对象,用于去生成和创建document对象的对象 -- DocumentBuilderDocumentBuilderFactory  factory  = DocumentBuilderFactory.newInstance();//生产用于创建Document对象的builder对象DocumentBuilder builder = factory.newDocumentBuilder();//生成Document对象Document document= builder.parse(new FileInputStream("src/item.xml"));//输入xml文件目录//查找文件中的标签NodeList nodeList = document.getElementsByTagName("bean");//遍历装了所有节点的节点集合for(int i =0;i<nodeList.getLength();i++) {//遍历当前的Node节点,Node是整个节点的对象,子类Element中包含的是所有的属性相关的操作//(Node是对beans说的,Element是对每个bean说的)Element element = (Element)nodeList.item(i);String idVal = element.getAttribute("id");String clsVal = element.getAttribute("class");//如果只想要某个key对应的对象,再次加一个if,只让一个指定的key执行以下操作//拿到值之后,通过反射进行解析System.out.println(idVal+"--"+clsVal);//以下是利用反射来解析和创建对象Class cls = Class.forName(clsVal);Constructor cons = cls.getConstructor(String.class);//构建对象Item item = (Item)cons.newInstance("茶叶");System.out.println(item);}}输出结果:items--cn.yunhe.beans.ItemItem [itemName=茶叶, price=0.0]items2--cn.yunhe.beans.ItemItem [itemName=茶叶, price=0.0]items3--cn.yunhe.beans.ItemItem [itemName=茶叶, price=0.0]

3. Dom4j解析方法

 public static void dom4jParseMethod() {SAXReader reader = new SAXReader();// 解析xml文件Document document = reader.read(new FileInputStream("src/item.xml"));// 获取文档的根结构Element rootElement = document.getRootElement();// 根据根节点去查找其下 面的所有的子节点(不同于Dom的是,此处的Element是导入的dom4j的包,不在是代表节点中的元素,而是代表节点)List<Element> elementList = rootElement.elements();// 遍历节点集合for (int i = 0; i < elementList.size(); i++) {// 循环次数是bean标签的数量// 获取当前节点对象Element element = elementList.get(i);// 将节点中的所有属性封装到了一个List<Attribute>List<Attribute> attrList = element.attributes();for (Attribute attr : attrList) {// 遍历集合,循环次数是每个bean标签内的键对值的对数String keyName = attr.getName();// 获取当前键对值的key(此处就是id和class)String keyVal = attr.getValue();// 获取当前键对值的value(此处就是items和...)System.out.println(keyName + "--" + keyVal);}}}输出结果:id--itemsclass--cn.yunhe.beans.Itemid--items2class--cn.yunhe.beans.Itemid--items3class--cn.yunhe.beans.Item

如果是拿一个指定的对象

public static void dom4jParseMethod2() {SAXReader reader = new SAXReader();Document document = reader.read(new FileInputStream("src/item.xml"));Element rootElement = document.getRootElement();List<Element> elementList = rootElement.elements();for (int i = 0; i < elementList.size(); i++) {Element element = elementList.get(i);List<Attribute> attrList = element.attributes();String idKey = null;// 一个标识for (Attribute attr : attrList) {String keyName = attr.getName();String keyVal = attr.getValue();if ("id".equals(keyName)) {// 判断是否符合要求if ("item".equals(keyVal)) {// 出于键值对特点的考虑,也判断一下idKey = keyName;}}if (idKey != null) {if ("class".equals(keyName)) {// 如果是class,执行映射,取出对象Class cls = Class.forName(keyVal);Constructor cons = cls.getConstructor(String.class);Item item = (Item) cons.newInstance("hello world");System.out.println(item);idKey = null;// 清空}}}}}

Jav新人之路 -- XML解析相关推荐

  1. Java XML解析器

    使用Apache Xerces解析XML文档 一.技术概述 在用Java解析XML时候,一般都使用现成XML解析器来完成,自己编码解析是一件很棘手的问题,对程序员要求很高,一般也没有专业厂商或者开源组 ...

  2. 数据解析1:XML解析(2)

    上一篇着重记录了XML解析中的SAX解析,该篇继续上篇(数据解析1:XML解析(2))未讲完的内容. XML补充: 1. 2. . 3. 示例:使用SAX解析一个比较复杂的XML文件 1 <?x ...

  3. Java中四种XML解析技术之不完全测试

    Java中四种XML解析技术之不完全测试 <script language=javascript src=""></script> 在平时工作中,难免会遇到 ...

  4. XML简介,XML和HTML的区别,XML用处,XML规则,XML约束,XML语法,XML解析,DOM

    什么是xml XML 指可扩展标记语言(EXtensible Markup Language),它的结构是一种树形的结构,必须有一个根节点 XML 是一种标记语言,很类似 HTML XML 的设计宗旨 ...

  5. spring xercesImpl xml 解析问题

    spring xercesImpl xml 解析问题 分类: spring 2009-12-29 16:11 1248人阅读 评论(0) 收藏 举报 xmlspringschema文档jbossjdk ...

  6. c语言解析xml字符串_Python XML解析

    Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...

  7. XML解析简介及Xerces-C++简单使用举例

    XML是由World WideWeb联盟(W3C)定义的元语言.它已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.XML在不同的语言里解析方式 ...

  8. Java XML解析工具 dom4j介绍及使用实例

    Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...

  9. C++ XML解析之TinyXML篇[转]

    最 近使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完 成.以后的文章里会讲 ...

最新文章

  1. window下python扩展包大全
  2. Android 图片透明度处理代码
  3. Java学习笔记20
  4. poj1738 an old stone game
  5. codeforces 706B B. Interesting drink(二分)
  6. JVM—内存模型JMM
  7. 接受map_[译] 图解 Map、Reduce 和 Filter 数组方法
  8. Codeforces Round #420 E
  9. Spark的输出提交控制器OutputCommitCoordinator
  10. CSS3学习笔记-技术提示
  11. elt php,ELT(数据仓库技术) 学习
  12. 大数据基础(一)——关系+文章
  13. python3解密栅栏密码的正确方法
  14. Forth 常见问题解答
  15. 信息搜集-读取微信聊天记录
  16. 短视频获客系统另附属源码理论分享
  17. NRF24L01实验(STM32F103ZE与STM32L475ZE通信)
  18. 解释:commission errors(错分误差) and omission errors(漏分误差)
  19. C++设计模式之工厂模式
  20. 使用 FFmpeg(bilibili视频m4s合成mp4)

热门文章

  1. 京东:基于多类目MoE模型的电商搜索引擎
  2. js实现汉字中文排序
  3. 命名自喜剧团体,宅男程序员三个月写出的编程语言是如何改变世界的?
  4. 【狮子数学】chapter3-02-不定积分的计算(56-58讲)
  5. 和我一起学 Three.js【初级篇】:3. 掌握摄影机
  6. 网址验证的两种正则表达式
  7. qt单步调试时进程挂起
  8. 从贝叶斯公式到贝叶斯判别准则
  9. 计算机辅助药物设计 fda,计算机辅助药物设计中的分子动力学模拟.pdf
  10. 2-微信红包(2016腾讯校招)