dom技术解析xml下jaxp解析器详细代码
1.使用jaxp实现查询操作
person.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<person>
<p1>
<name>宝娟</name>
<age>20</age>
<school>**大学**</school>
</p1>
<p1>
<name>鑫鑫</name>
<age>25</age>
<school>**大学**</school>
</p1>
</person>
package example4;
//jaxp技术解析xml文件
import java.io.IOException;
import java.util.function.DoubleConsumer;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;
//类名
class person {
//主方法
public static void main(String[] args) throws Exception {
// jaxp技术解析xml文件
// 1.创建解析器工厂
//selectAll();
//selectSome();
// addSex();
//modifySex();
//delSex();
visitAll();
}
// 向某一个标签下添加新的结点
private static void addSex() throws Exception {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse("src/example4/person.xml");
// 获取标签
NodeList list = document.getElementsByTagName("school");
// 获得具体的一个节点
Node school1 = list.item(0);
// 创建一个新的节点
Element s = document.createElement("sex");
// 创建一个文本
Text text1 = document.createTextNode("男");
// 将新的节添加入某个节点之后
school1.appendChild(s);
// 在新节点之下添加文本
s.appendChild(text1);
// 经过以上操作之后,没有报错,但没有将具体内容写入xml文件,是因为这一切内容只是在内存中操作,接下来需要写入xml文件
// 回写xml文件(利用transformer类进行回写操作)
// 创建TransformerFactory解析工厂
TransformerFactory transformer = TransformerFactory.newInstance();
// 创建tansformer解析器
Transformer former = transformer.newTransformer();
former.transform(new DOMSource(document), new StreamResult("src/example4/person.xml"));
}
// 修改第一个节点<p1>下的sex改为女
private static void modifySex() throws Exception {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse("src/example4/person.xml");
NodeList list = document.getElementsByTagName("sex");
Node name1 = list.item(0);
//重新设置sex的值
name1.setTextContent("女");
// xml回写
TransformerFactory transformer = TransformerFactory.newInstance();
Transformer former = transformer.newTransformer();
former.transform(new DOMSource(document), new StreamResult("src/example4/person.xml"));
}
// 删除节点sex
private static void delSex() throws Exception {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse("src/example4/person.xml");
NodeList list = document.getElementsByTagName("sex");
//得到sex节点
Node name1 = list.item(0);
//得到sex的父节点
Node name2 = name1.getParentNode();
//父节点删除子节点
name2.removeChild(name1);
// xml回写
TransformerFactory transformer = TransformerFactory.newInstance();
Transformer former = transformer.newTransformer();
former.transform(new DOMSource(document), new StreamResult("src/example4/person.xml"));
}
// 只查询xml中某一结点的值
private static void selectSome() throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse("src/example4/person.xml");
NodeList list = document.getElementsByTagName("name");
System.out.println(list.item(0).getTextContent());
}
// jaxp技术解析xml文件,获取所有的name
private static void selectAll() throws ParserConfigurationException, SAXException, IOException {
// 1.创建解析器工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
// 2.创建解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
// 3.得到document对象
Document document = builder.parse("src/example4/person.xml");
// 4.获取想要的结果
NodeList list = document.getElementsByTagName("name");
//遍历结点列表
for (int i = 0; i < list.getLength(); i++) {
//得到结点
Node name = list.item(i);
//得到该节点的内容
String s = name.getTextContent();
System.out.println(s);
}
}
//遍历xml中的所有元素名称并打印输出
private static void visitAll() throws Exception {
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFactory.newDocumentBuilder();
Document document=builder.parse("src/example4/person.xml");
list1(document);
}
//递归遍历的方法
private static void list1(Node node) {
//得到它的子节点序列
NodeList list=node.getChildNodes();
for(int i=0;i<list.getLength();i++) {
//的到每一个节点
Node node1=list.item(i);
//递归调用继续得到它的子节点序列
list1(node1);
}
//判断是元素类型才打印
if(node.getNodeType()==node.ELEMENT_NODE) {
System.out.println(node.getNodeName());
}
}
}
**以上是jaxp解析xml的提个简单方法介绍,不会的可以查找中文版手册,只需firefox或者google"java platform se 6"即可找到相关方法介绍,建议大家使用eclipse编辑器,每一步有提示,很方便。
如有其他问题,欢迎留言,我们一起讨论你一起学习。
**革命尚未成功,通知仍需努力!
dom技术解析xml下jaxp解析器详细代码的更多相关文章
- sax技术解析xml下jaxp解析器详细代码
*解析xml的两种技术dom和sax dom:根据xml的层级结构在内存中分配一个树形结构,把xml标签,属性,文本封装成对象. sax方式:事件驱动,边读边解析. 在javax.xml.parser ...
- Android解析XML之SAX解析器
SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件 ...
- xml解析方式之JAXP解析入门
XML解析 1 引入 xml文件除了给开发者看,更多的情况使用[程序读取xml文件]的内容.这叫做xml解析 2 XML解析方式(原理不同) DOM解析 SAX解析 3 XML解析工具 DOM解析原理 ...
- XML基础+Java解析XML +几种解析方式的性能比较
XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数 ...
- ElementTree 解析xml(minidom解析xml大文件时,MemoryError)
在使用minido解析xml文件时,因为文件过大,结果报错MemoryError.查询后得知是因为minidom在解析时是将所有文件放到内存里的,很占用内存,所以要考虑换一种方法来处理xml文件. ...
- Sax解析xml及pull解析xml
sax解析参考:http://www.iteye.com/topic/763895: 说明:测试时报空指针异常,未能读取到数据,关注Sax解析的过程及API即可: pull解析参考:http://ww ...
- 使用XMLConfiguration解析xml,PropertiesConfiguration解析properties等相应信息
org.apache.commons.configuration.XMLConfiguration; Apache Common-Configuration工具可以从Properties文件,XML文 ...
- Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术
一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...
- XML 解析之 jaxp 解析器
XML 的解析方式有两种方式: DOM 解析和 SAX 解析. DOM 解析: 根据 XML 的层级结构, 在内存中分配一个树形结构, 把 XML 的标签, 属性和文本都封装成对象. 优点: 可以实现 ...
随机推荐
- BNU 26349——Cards——————【区间dp】
题目大意:给你n张牌,排成一排放在桌子上,可以从左端拿也可以从右端拿.现在有A,B两人轮流取牌,A先取,两人足够聪明,即都想取最大的牌总和,问A能取到的最大值. 解题思路:定义dp[i][j][k]. ...
- C#让窗体在启动时直接隐藏
最完美的解决办法,不闪烁.思路为:首先将窗体透明度设置为0,这样窗体在启动时就不显示了,然后再调用Hide将窗体隐藏再将其透明度设置为1即可. 其实就设置2个地方就行了. 1:设置窗体透明度为0 2: ...
- Hibernate课程 初探多对多映射2-4 测试
package com.ddwei.test; import org.hibernate.Session; import org.hibernate.Transaction; import com.d ...
- position的参考基准
static(静态):position默认的样式:占据标准流的位置, 它会忽略top.bottom.left . right 的设置 relative(相对): 占据标准流的位置:可将其移至相对于其正 ...
- npm下载某个版本
如果我想要引入的是Jquery的1.7.2版本,则输入npm intall jquery@1.7.2,那么npm包管理器就会帮助你下载jquery1.7.2的版本到你当前操作目录下的node_modu ...
- HTML超链接实用
1.文本链接: <a href="http://www.meng.com/" target="_blank">访问meng!</a> 2 ...
- ArcMap如何修改地图坐标系统
有时候,地图投影坐标需要作出修改,使得符合要求,不然空间参考不一样无法进行进一步的操作,分析等!下面介绍arcgis地图投影坐标的修改! 1.首先,将地图数据导入,这里我导入的是广西的边界图bound ...
- android listview 加载遇到的问题
http://blog.csdn.net/l_serein/article/details/7706338 转载: 描述一下场景: 菜单栏上有若干分类,点击每一个分类,ListView下分根据分类显示 ...
- 炫酷的Html+css (一)
博客园在别的 博主看到一个样式, 里面有一段这样的 正方体旋转的 动态图 吸引了我. 找博主要了代码, 贴出来 与大家共享. 鼠标放上去会展开 一大一小两个正方体, 鼠标悬浮上去, 外面的正方体会展开 ...
- Azure 进阶攻略 | 文件完整性,你打算如何证明?
假设你是一位独立软件开发者,通过自己的网站提供软件下载.网站完全托管在 Azure 中,并且软件下载也是通过 Azure Blob 存储和 Azure CDN 服务提供的. 这做法真不错,不需要自己管 ...