XML解析(DOM)
001 |
public class DOM_Parser { |
002 |
003 |
public static void main(String[] args) { |
004 |
try { |
005 |
String path = DOM_Parser.class.getClassLoader() |
006 |
.getResource("books.xml").getPath(); |
007 |
|
008 |
// 获取文档对象 |
009 |
Document doc = getDocumentByPath(path); |
010 |
011 |
// 遍历文档对象树(加载xml文档在内存中形成的文档对象树) |
012 |
// 获取xml文档根元素 |
013 |
Element root = doc.getDocumentElement(); |
014 |
015 |
BookVO vo = new BookVO(); |
016 |
vo.setId("004"); |
017 |
vo.setName("JAVA未眠者"); |
018 |
// 创建一个新的book元素 |
019 |
createBookElement(doc, root, vo); |
020 |
021 |
// 遍历元素 |
022 |
// iteratorElement(root); |
023 |
iteratorElement2(root); |
024 |
025 |
} catch (ParserConfigurationException e) { |
026 |
e.printStackTrace(); |
027 |
} catch (SAXException e) { |
028 |
e.printStackTrace(); |
029 |
} catch (IOException e) { |
030 |
e.printStackTrace(); |
031 |
} |
032 |
} |
033 |
034 |
/** |
035 |
* 遍历元素 |
036 |
* |
037 |
* @param ele |
038 |
*/ |
039 |
private static void iteratorElement(Element ele) { |
040 |
// 获取根元素下子元素(book元素) |
041 |
NodeList bookNodes = ele.getChildNodes(); |
042 |
043 |
for (int i = 0; i < bookNodes.getLength(); i++) { |
044 |
Node bookNode = bookNodes.item(i); |
045 |
// 判断当前节点是否为元素节点 |
046 |
if (bookNode.getNodeType() == Node.ELEMENT_NODE) { |
047 |
Element childEle = (Element) bookNode; |
048 |
// 根据元素上的属性名获取到对应的属性值 |
049 |
if (childEle.hasAttribute("id")) { |
050 |
System.out.print("id = " + childEle.getAttribute("id") |
051 |
+ " "); |
052 |
// 遍历book元素下的子元素 |
053 |
iteratorElement(childEle); |
054 |
} else { |
055 |
System.out.print(childEle.getNodeName() + " = " |
056 |
+ childEle.getTextContent() + " "); |
057 |
058 |
if ("author".equals(childEle.getNodeName())) { |
059 |
System.out.println(); |
060 |
} |
061 |
} |
062 |
063 |
} |
064 |
} |
065 |
} |
066 |
|
067 |
/** |
068 |
* 通过getElementsByTagName()方法遍历文档对象树中元素 |
069 |
* |
070 |
* @param root |
071 |
*/ |
072 |
private static void iteratorElement2(Element root) { |
073 |
//获取所有book元素节点 |
074 |
NodeList books = root.getElementsByTagName("book"); |
075 |
NodeList name = root.getElementsByTagName("name"); |
076 |
NodeList type = root.getElementsByTagName("type"); |
077 |
NodeList price = root.getElementsByTagName("price"); |
078 |
NodeList author = root.getElementsByTagName("author"); |
079 |
|
080 |
for (int i = 0; i < books.getLength(); i++) { |
081 |
Element bookEle = (Element)books.item(i); |
082 |
System.out.print("id = " + bookEle.getAttribute("id")); |
083 |
|
084 |
Element nameEle = (Element)name.item(i); |
085 |
System.out.print(" name = " + nameEle.getTextContent()); |
086 |
System.out.println(); |
087 |
} |
088 |
} |
089 |
090 |
/** |
091 |
* 创建新的book元素对象 |
092 |
* |
093 |
* @param doc |
094 |
* @param root |
095 |
*/ |
096 |
private static void createBookElement(Document doc, Element root, BookVO vo) { |
097 |
// 向文档对象树上添加新book子元素 |
098 |
// 创建新的book元素 |
099 |
Element book = doc.createElement("book"); |
100 |
book.setAttribute("id", vo.getId()); |
101 |
102 |
// 创建book元素下的子元素 |
103 |
Element name = doc.createElement("name"); |
104 |
name.setTextContent(vo.getName()); |
105 |
Element price = doc.createElement("price"); |
106 |
Element type = doc.createElement("type"); |
107 |
Element author = doc.createElement("author"); |
108 |
109 |
// 构建元素之间层次关系 |
110 |
book.appendChild(name); |
111 |
book.appendChild(price); |
112 |
book.appendChild(type); |
113 |
book.appendChild(author); |
114 |
115 |
root.appendChild(book); |
116 |
} |
117 |
118 |
/** |
119 |
* 根据xml文档路径,获取解析xml文档对应的文档对象 |
120 |
* |
121 |
* @param path |
122 |
* @return |
123 |
* @throws ParserConfigurationException |
124 |
* @throws SAXException |
125 |
* @throws IOException |
126 |
*/ |
127 |
private static Document getDocumentByPath(String path) |
128 |
throws ParserConfigurationException, SAXException, IOException { |
129 |
// 获取DOM解析器工厂对象 |
130 |
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); |
131 |
// 获取DOM解析器对象 |
132 |
DocumentBuilder db = dbf.newDocumentBuilder(); |
133 |
134 |
// 加载要解析xml文档 |
135 |
Document doc = db.parse(path); |
136 |
return doc; |
137 |
} |
138 |
} |
XML解析(DOM)的更多相关文章
- Android中XML解析-Dom解析
Android中需要解析服务器端传过来的数据,由于XML是与平台无关的特性,被广泛运用于数据通信中,有的时候需要解析xml数据,格式有三种方式,分别是DOM.SAX以及PULL三种方式,本文就简单以D ...
- XML 解析---dom解析和sax解析
眼下XML解析的方法主要用两种: 1.dom解析:(Document Object Model.即文档对象模型)是W3C组织推荐的解析XML的一种方式. 使用dom解析XML文档,该解析器会先把XML ...
- XML解析——DOM解析
XML:可扩展性标记语言,主要用来传输和存储数据,相对于HTML的各种标签规范,XML的标签可以让用户根据语义自己进行定义,适用于web传输. JSON和XML的区别: (1).XML定义 扩展标记语 ...
- Xml解析(Dom解析xml)
xml四种解析方式: DOM 平台无关的官方解析方式 优点:形成了树结构,直观好理解,代码更易编写 解析过程中树结构保留在内存中,方便修改 缺点:当xml文件较大时,对内存耗费比较大,容易影响解析性能 ...
- XML解析之DOM详解及与SAX解析方法的比较
XML解析(DOM) XML文件解析方法介绍 我们所用到的NSXMLParser是采用SAX方法解析 SAX(Simple API for XML) 只能读,不能修改,只能顺序访问,适合解析大型XML ...
- XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax
本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...
- 使用XWAF框架(5)——XML解析器:CXDP
XWAF推出了自己的组合式XML文档解析器,英文名叫:“CXDP”,是“Combined XML Document Parser”的缩写.核心代码属XWAF原创,注释.日志和帮助文档采用全中文描述,特 ...
- 用java操作XML文件(DOM解析方式)
XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...
- 【Java】XML解析之DOM
DOM介绍 DOM(Document Object Model)解析是官方提供的XML解析方式之一,使用时无需引入第三方包,代码编写简单,方便修改树结构,但是由于DOM解析时是将整个XML文件加载到内 ...
随机推荐
- python008 Python3 字符串
var1 = 'Hello World!' var2 = "QQ603374730" Python 访问字符串中的值Python 不支持单字符类型,单字符也在Python也是作为一 ...
- 实体类与实体DTO类之间的转换
实体类与实体DTO类之间的转换 实体类与实体DTO类之间的转换 1.通过使用第三方序列化反序列化工具Newtonsoft.Json 2.通过反射实现 3.通过表达式目录树加字典缓存实现 4. 通过表达 ...
- ASP.NET状态保持cookie与session
ASP.Net状态保持 一.ASP.Net中的状态保持如下图: 二.客户端的状态保持方案 ViewState.隐藏域.Cookies.控件状态.URL查询参数 ->View ...
- hdu 4819 Mosaic
无论是线段树还是树状数组维护最大值最小值的时候一定要注意,如果有修改操作的话,这个最小值和最大值的更新一定不能由原来的和修改的值得到,一定要重新查询一次,否则可能出现当前最小值是原来的未修改值,但事实 ...
- java 读取数据库数据转化输出XML输出在jsp页面
因为老师实验报告要求,搭建服务端解析XML 下面代码实现转化XML格式也是在网上找的转化代码 输出在jsp页面以便于客户端解析是自己写的 一个类就解决了Test package tests; //三只 ...
- SVN 更新后Tomcat 启动时出现问题
更新了svn后,启动本地的tomcat容器发现启动不了, 检查后发现是配置文件配置出现问题,因为我们的该项目 配置有tomcat与weblogic两种 , 而在我的web.xml中 默认配置的serv ...
- 限制input的输入类型
1.只能输入和粘贴汉字 <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste= ...
- Scala入门到精通——第十六节 泛型与注解
本节主要内容 泛型(Generic Type)简单介绍 注解(Annotation)简单介绍 注解经常使用场景 1. 泛型(Generic Type)简单介绍 泛型用于指定方法或类能够接受随意类型參数 ...
- SQL 连接(JOIN)
SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来. SQL JOIN SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JO ...
- 编译iOS使用的.a库文件
首先是须要编译成.a的源文件 hello.h: #ifndef __INCLUDE_HELLO_H__ #define __INCLUDE_HELLO_H__ void hello(const cha ...