1.Node准备

Node接口是整个文档对象模型的主要数据类型,它表示该文档树中的单个节点。例如Attr, CharacterData, Comment, Text,Element都是Node的子类。 xml解析的误区: 在xml文件解析过程中,所有信息都被当做一个对象,例如解析下面的语句

/*
* <book>AAA<name>java语法</name>BBB</book>
* 该book下的直接子节点有3个,AAA和BBB被解析为CharacterData类型的节点,<name>被解析为Element类型的节点,
*
* <book> <name>java语法</name> </book>
* 该book下的直接子节点有3个,由于在<name>之前有个换行,CharacterData类型的节点
* <book><name>java语法</name></book> 该book下的直接子节点只有1个
*/

2.Dom解析优缺点

优点:整个文档读入内存,方便操作:支持修改、删除和重现排列等多种功能。

缺点:将整个文档读入内存中,保留了过多的不需要的节点,浪费内存和空间。

3.Dom解析xml

/**
* 解析xml文件,遍历并所有信息
*/
public static void parseXMl() {
try {
// 1.通过DocumentBuilder工厂得到对应的xml解析器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); // 2.通过解析器得到Document对象
Document doc = builder.parse("d:/my.xml"); // 3.解析数据
/*
* <book>
* <name>javaWeb</name>
* <author>fanglx</author>
* <price>30.90</price>
* </book>
*/
//得到所有的book的标签的nodelist
NodeList nodeList = doc.getElementsByTagName("book");
//遍历每个book节点
for(int i=0; i<nodeList.getLength(); i++){
Node node = nodeList.item(i); //当前遍历的book节点
//得到该book节点下的所有的直接子节点
NodeList childNodes = node.getChildNodes();
for(int j=0; j<childNodes.getLength(); j++){
Node childNode = childNodes.item(j);
//如果当前的childNode节点是一个标签,CharacterData类型的文本节点则不执行
if(childNode instanceof Element){
String fieldName = childNode.getNodeName(); //当前节点名称 比如author
String value = childNode.getTextContent(); //当前节点的text值比如fanglx
/*
* 或者下面方式得到value值
* String value = childNode.getFirstChild().getNodeName();//fanglx
*/
System.out.println(fieldName+"="+value); //author=fanglx
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 对xml文件的更新
*/
public static void updateXMl() {
try {
// 1.通过DocumentBuilder工厂得到对应的xml解析器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder(); // 2.通过解析器得到Document对象
Document doc = builder.parse("d:/my.xml"); // 3.更新数据
/*
* <book>
* <name>javaWeb</name>
* <author>fanglx</author>
* <price>30.90</price>
* </book>
*/
NodeList nodeList = doc.getElementsByTagName("book");
Element parentEle = (Element) nodeList.item(0); //直接在子标签的尾部增加<num id="1001">25</num>
Element childEle = doc.createElement("num");
childEle.setAttribute("id", "1001");//设置属性
childEle.setTextContent("25"); //设置值
parentEle.appendChild(childEle); //直接在price标签前面增加<age id="25">mm</age>
Element newChild = doc.createElement("age");
newChild.setAttribute("id", "25"); //设置属性
newChild.setTextContent("mm"); //设置值
Element refChild = (Element) parentEle.getElementsByTagName("price").item(0);
parentEle.insertBefore(newChild, refChild); // 4.保存更新的数据
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult(new File("c:/my.xml")));
} catch (Exception e) {
e.printStackTrace();
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<books>
<book>
<name>javaWeb</name>
<author>fanglx</author>
<price>30.90</price>
</book>
</books>

Java_xml_Dom解析方式的更多相关文章

  1. iOS - 分析JSON、XML的区别和解析方式的底层是如何实现的(延伸实现原理)

    <分析JSON.XML的区别,JSON.XML解析方式的底层是如何实现的(延伸实现原理)> (一)JSON与XML的区别: (1)可读性方面:基本相同,XML的可读性比较好: (2)可扩展 ...

  2. 用java操作XML文件(DOM解析方式)

    XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...

  3. JSON的三种解析方式

    一.什么是JSON? JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串字符串 只不过元素会使用特定 ...

  4. Android中的三种XML解析方式

    在Android中提供了三种解析XML的方式:SAX(Simple API XML),DOM(Document Objrect Model),以及Android推荐的Pull解析方式.下面就对三种解析 ...

  5. XML的解析方式(DOM、SAX、StAX)

    (新)  XML的解析方式(DOM.SAX.StAX) 博客分类: XML   一般来说,解析XML文件存在着两种方式,一种是event-based API,比如说象SAX,XNI. 第二种是tree ...

  6. xml中俩种解析方式

    两种解析方式 1.from xml.etree import ElementTree as ET 利用ElementTree模块下的xml方法可以把一个字符串类型的东西转换成Element类,从而利用 ...

  7. XML解析——Java中XML的四种解析方式

    XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四 ...

  8. XML文件的解析方式

    XML文件4种解析方式分别是:DOM解析,SAX解析,JDOM解析,DOM4J解析.1.基础方法:DOM:与平台无关的官方的解析方式.SAX:Java平台提供的基于事件驱动的解析方式.2.扩展方法(在 ...

  9. XML有哪些解析方式有何优缺点?xml有哪些解析技术?区别是什么?

    有DOM,SAX,STAX等 (1):DOM:处理大型文件时其性能下降的非常厉害.这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XM ...

随机推荐

  1. System Operations on AWS - Lab 6W - Using Auto Scaling (Windows)

    创建你的一个web server,然后将这个实例制成你的AMI,通过启动配置生成一个Auto Scaling组(包括scale-in/scale-out策略),配置一台Load Balancer指向你 ...

  2. codeforces 148D Bag of mice(概率dp)

    题意:给你w个白色小鼠和b个黑色小鼠,把他们放到袋子里,princess先取,dragon后取,princess取的时候从剩下的当当中任意取一个,dragon取得时候也是从剩下的时候任取一个,但是取完 ...

  3. 【原创教程】鲸吞HTML

    首先,我们的angularJS课程分为三大模块: HTML/CSS/JS基础. angularJS详解. angualrJS的一些实用框架讲解. 其中,第一大模块的对象是对前端开发技术有点了解但不熟悉 ...

  4. php strtotime函数服务器和本地不相同

    遇到过一种情况strtotime 在本地和服务器不相同 服务器返回的是-1 strtotime($sa_sagyo_ymd."23:59:59") 如果这样用不了,就只能换一种写法 ...

  5. Intellj新增maven项目骨架

    我们经常用maven骨架构建项目,本来普通的几个archetype就够用的,但是近来要来时开发liferay项目 相关的项目骨架Intellj IDEA就没有内置,所以就想添加进去,  有两个办法可以 ...

  6. word每次打开都要选择文档类型

    每次打开word07 都出现下面一个框框,说要转换文件. 在Word2013文档中,为了能更好地使用“从任意文件还原文本”功能,用户需要启用“打开时确认文件格式转换”功能,以在打开并恢复文件时出现文件 ...

  7. .NET 统一用户管理 -- 单点登录

    单点登录 前言 本篇做为.Net 统一用户管理的系列文章的开山之作,主要说一个单点登录是怎么实现的,以及为啥要统一用户管理. 单点登录(Single Sign On),简称为 SSO,是目前比较流行的 ...

  8. union与union all 的区别

    Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并 ...

  9. SQL Server 2008文件与文件组的关系

    此文章主要向大家讲述的是SQL Server 2008文件与文件组,其中包括文件和文件组的含义与关系,文件.文件组在实践应用中经常出现的问题,查询文件组和文件语句与MSDN官方解释等相关内容的介绍. ...

  10. 关于HMTL -[HTML5]

    前言: 为什么学习它?(HTML5) 会不会HTML5,其实并不会影响我的开发效率,我觉得终究还是跟个人性格有关,我喜欢前沿的东西.这就好比我大学里学的计算机,但我仍然会去看一些跟专业不相关的书籍一样 ...