递归方式 DOM 解析(parse) XML
friends.xml
- <span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?>
- <friends date="2012">
- <!--此处为注释-->
- <friend id="1">
- <姓名>小红</姓名>
- <QQ>123456789</QQ>
- </friend>
- <friend>
- <姓名>小平</姓名>
- <QQ>12345678</QQ>
- </friend>
- <friend>
- <姓名 mark="hello">小敏</姓名>
- <QQ>1234567</QQ>
- </friend>
- <friend>
- <姓名>小良</姓名>
- <QQ>987654321</QQ>
- </friend>
- <friend>
- <姓名>小健</姓名>
- <QQ>98765432</QQ>
- </friend>
- </friends>
- </span>
DOM parse XML
- <span style="font-size:16px;">import java.io.File ;
- import javax.xml.parsers.DocumentBuilderFactory ;
- import javax.xml.parsers.DocumentBuilder ;
- import org.w3c.dom.Element ;
- import org.w3c.dom.Document ;
- import org.w3c.dom.NamedNodeMap ;
- import org.w3c.dom.NodeList ;
- import org.w3c.dom.Attr ;
- import org.w3c.dom.Node ;
- import org.w3c.dom.Comment ;
- //利用 递归 dom 解析任何xml文档,把xml文档加载到内存,占用内存大,可随机访问
- public class RecursionDOM_XML
- {
- public static void main(String[] args) throws Exception
- {
- //1.获取dom解析器工厂
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance() ;
- //2.获取具体的dom解析器
- DocumentBuilder db = dbf.newDocumentBuilder() ;
- //获取xml文档的 根节点
- Document document = db.parse(new File("friends.xml") );
- //获取文档的 根元素节点
- Element e = document.getDocumentElement() ;
- parseXML(e) ;
- }
- public static void parseXML(Element element)
- {
- //获取 元素节点 的 信息
- String name = element.getNodeName() ;
- System.out.print("< " + name) ;
- //获取此元素节点的属性
- NamedNodeMap map = element.getAttributes() ;
- //获取目前element元素节点下的 孩子节点(包括空格)</span>
- <span style="font-size:16px;"> NodeList child = element.getChildNodes() ;
- if (null != map)
- {
- for (int i = 0; i < map.getLength(); i++ )
- {
- Attr attr = (Attr)map.item(i) ;
- String name1 = attr.getName() ;
- String value1 = attr.getValue() ;
- System.out.print(" " + name1 +"=\"" + value1 +"\"") ;
- }
- }
- System.out.print(" >") ;
- for (int j = 0; j < child.getLength() ;j++ )
- {
- Node node = child.item(j) ;
- //判断该节点是不是 元素节点 ,递归路口
- if (node.getNodeType() == Node.ELEMENT_NODE)
- {
- //开始递归
- parseXML((Element)node) ;
- }
- //判断该节点是不是 文本,递归出口
- else if (node.getNodeType() == Node.TEXT_NODE)
- {
- System.out.print(node.getNodeValue() + "") ;
- }
- //判断该节点是不是 注释
- else if (node.getNodeType() == Node.COMMENT_NODE)
- {
- System.out.print("<!--");
- Comment comment = (Comment)node ;
- //注释内容
- String data = comment.getData() ;
- System.out.print(data);
- System.out.print("-->");
- }
- }
- System.out.println("</" + name + ">" ) ;
- }
- }</span>
递归方式 DOM 解析(parse) XML的更多相关文章
- mybatis源码-解析配置文件(一)之XML的DOM解析方式
目录 简介 Java 中 XML 文件解析 解析方式 DOM 解析 XML 新建 XML 文件 DOM 操作相关类 Java 读取 XML 文件 一起学 mybatis @ 简介 在之前的文章< ...
- XML 解析---dom解析和sax解析
眼下XML解析的方法主要用两种: 1.dom解析:(Document Object Model.即文档对象模型)是W3C组织推荐的解析XML的一种方式. 使用dom解析XML文档,该解析器会先把XML ...
- Java Dom解析xml
Dom解析是将xml文件全部载入,组装成一颗dom树,然后通过节点以及节点之间的关系来解析xml文件,下面结合这个xml文件来进行dom解析. <?xml version="1.0&q ...
- 简单谈谈dom解析xml和html
前言 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.html,xml都是基于这个模型构造的.这也是一个W3C推出的标准.j ...
- android XML解析之DOM解析方式
DOM 解析方式步骤: 第一步:首选需要获得DOM解析器工厂实例 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance ...
- java xml解析方式(DOM、SAX、JDOM、DOM4J)
XML值可扩展标记语言,是用来传输和存储数据的. XMl的特定: XMl文档必须包含根元素.该元素是所有其他元素的父元素.XML文档中的元素形成了一颗文档树,树中的每个元素都可存在子元素. 所有XML ...
- 用java操作XML文件(DOM解析方式)
XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...
- XML的解析方式(DOM、SAX、StAX)
(新) XML的解析方式(DOM.SAX.StAX) 博客分类: XML 一般来说,解析XML文件存在着两种方式,一种是event-based API,比如说象SAX,XNI. 第二种是tree ...
- java解析xml的方式DOM,SAX,DOM4J,JDOM,StAX
1)DOM(JAXP Crimson解析器)DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找 特定信息. ...
随机推荐
- 「SCOI2015」情报传递
「SCOI2015」情报传递 题目描述 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有 \(n\) 名情报员.每名情报员可能有若干名(可能没有)下线,除 \(1\) 名大头目外其余 ...
- 51nod1423 最大二"货" 单调栈
枚举每个点作为次大值,用单调栈处理出左边 / 右边第一个比它大的数,直接回答 复杂度$O(n)$ #include <cstdio> #include <cstring> #i ...
- [BZOj4336][BJOI2015]骑士的旅行(树链剖分+线段树)
树链剖分,对每个叶子用multiset记录前K大士兵,其余节点通过从儿子归并维护前K大士兵.过于模板. #include<set> #include<cstdio> #incl ...
- 【欧拉函数】BZOJ4173-数学
[题目大意] [思路] 基本是popoqqq大爷的题解,稍微添加了几句自己的注释,方便理解 同理,如果n%k+m%k<k等价于0 =∑([(n+m)/k]-[n/k]-[m/k])×φ(k) … ...
- bzoj 1067 分情况讨论
这道题考察人的严谨,各种情况分类讨论. #include <cstdio> #include <algorithm> #include <map> #define ...
- ServiceStack.OrmLite破解
在 ServiceStack.OrmLite下的 OrmLiteConfigExtensions 第199行把这句注释掉就可以了 //LicenseUtils.AssertValidUsage(Lic ...
- ES6 Javascript 实用开发技巧
ES6 实用开发技巧 定义变量/常量 ES6 中新增加了 let 和 const 两个命令,let 用于定义变量,const 用于定义常量 两个命令与原有的 var 命令所不同的地方在于,let, c ...
- Linux下使用ISC DHCP可以实现动态推送静态路由表
ISC DHCP可以实现动态推送静态路由表,先做个记号. 参考: https://gauvain.pocentek.net/docs/dhcpd-push-routes/ http://www.isc ...
- 发布一个C++版本的ORM库SmartDB
先简单说说ORM的优点: 提高开发效率,减少重复劳动,只和业务实体打交道,由业务实体自动生成sql语句,不用手写sql语句. 简单易用, 可维护性好. 隔离数据源,使得我们更换数据源时不用修改代码. ...
- Eclipse NDK 配置,不用安装Cygwin
一.关于NDK:NDK全称:Native Development Kit.1.NDK是一系列工具的集合.NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用 ...