XML的DOM、SAX、DEMO4J及DEMO4J整合Path的代码例子
1.DMO解析
package cn.itcast.xml.dom; import java.io.File; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; public class Demo1 {
public static void main(String[] args) throws Exception {
//1 创建JAXPDOM 解析器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//2 通过工厂获得解析器
DocumentBuilder builder= factory.newDocumentBuilder();
//3 使用解析器解析文档得到Domcument对象
Document doc = builder.parse(new File("src/student.xml"));
//...........
//拿到所有的学生并打印学生信息
//1 获得所有student元素对象
NodeList students = doc.getElementsByTagName("student");
//2 遍历这些对象.取得number属性
for(int i = 0 ; i < students.getLength() ; i++ ){
/*if( students.item(i) instanceof Element){//判断是不是ELement对象
Element student = (Element)students.item(i);
}*/
if(students.item(i).getNodeType() == Node.ELEMENT_NODE){
Element student = (Element)students.item(i);
String number = student.getAttribute("number");
System.out.println("当前学生的学号是"+number);
//3 取得子元素.遍历子元素
NodeList list = student.getChildNodes();
for(int x = 0 ; x < list.getLength() ; x++){
if(list.item(x).getNodeType() == Node.ELEMENT_NODE){
// info可能是 name age sex
Element info = (Element)list.item(x);
// Node nodeName ==> 标签名
if(info.getNodeName().equals("name")){
System.out.println("当前学生的姓名是"+info.getTextContent());
}else if(info.getNodeName().equals("age")){
System.out.println("当前学生的年龄是是"+info.getTextContent());
}else if(info.getNodeName().equals("sex")){
System.out.println("当前学生的性别是"+info.getTextContent());
}
}
} } }
//4取得对应 名称 年龄 性别
}
}
2.SAX解析
1.重写处理函数
package cn.itcast.xml.sax; import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; public class MyHandler extends DefaultHandler { @Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("文档开始解析!");
} @Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("当前遍历的标签是"+qName);
String number = attributes.getValue("number"); if(!"".equals(number) && number!=null){
System.out.println("学生的学号是:"+number);
}
} @Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String str =new String(ch,start,length);
//去掉空白文本
str = str.trim(); if(str.length() != 0){
System.out.println("当前解析的文本是:"+str);
} }
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
System.out.println(qName+"元素解析结束");
} @Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("文档结束解析!");
}
}
2.使用它
package cn.itcast.xml.sax; import java.io.File; import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; public class Demo1 {
public static void main(String[] args) throws Exception {
//1 创建sax 解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//2 获得sax解析器
SAXParser saxParser =factory.newSAXParser();
//3 使用sax解析器解析xml文档.
saxParser.parse(new File("src/student.xml"), new MyHandler());
}
}
3.DEMO4J
1.读取 xml文档并打印文档内容
package cn.itcast.xml.dom4j; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader; public class Demo1 {
//hello 读取 xml文档并打印文档内容
public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/student.xml");
System.out.println(document.asXML());
}
}
2.取出所有学生的信息
package cn.itcast.xml.dom4j; import java.util.Iterator; import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; public class Demo2 {
//取出所有学生的信息
public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/student.xml");
//通过文档对象获得 根节点
Element root = document.getRootElement();
//遍历根节点下 ,名字为student的子元素节点
for ( Iterator i = root.elementIterator( "student" ); i.hasNext(); ) {
Element student = (Element) i.next();
//获得学生的number属性
String number = student.attributeValue("number");
System.out.println("学生的学号是"+number);
//获得学生的子元素
for ( Iterator j = student.elementIterator(); j.hasNext(); ) {
//可能是name age sex
Element info = (Element) j.next();
//获得元素的元素名
if(info.getName().equals("name")){
System.out.println("学生的姓名是"+info.getText());
}else if(info.getName().equals("age")){
System.out.println("学生的年龄是"+info.getText());
}else if(info.getName().equals("sex")){
System.out.println("学生的性别是"+info.getText());
}
} } }
}
3.(增)增加一个学生.学号ITCAST_0003,名字 zhangsan 年龄30 性别male
package cn.itcast.xml.dom4j; import java.io.FileWriter; import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class Demo3 {
//增加一个学生.学号ITCAST_0003,名字 zhangsan 年龄30 性别male
public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/student.xml");
//通过文档对象获得 根节点
Element root = document.getRootElement(); //1.在根元素下添加学生元素
Element student = root.addElement("student");
//2.为学生元素添加number属性
student.addAttribute("number", "ITCAST_0003");
//3.为学生元素添加子元素name age sex
//4.为子元素添加标签体
student.addElement("name").addText("zhangsan");
student.addElement("age").addText("30");
student.addElement("sex").addText("male"); //将内存中的Document会写到文件中 // Pretty print the document to System.out
OutputFormat format = OutputFormat.createPrettyPrint();
//创建一个xml的写入器. 构造函数中传入 写入的文件的位置和 格式化器
XMLWriter writer = new XMLWriter( new FileWriter( "src/student_copy.xml" ), format );
writer.write( document );
writer.close(); /* //创建一个xml的写入器. 构造函数中传入 写入的文件的位置
XMLWriter writer = new XMLWriter( new FileWriter( "src/student_copy.xml" ) );
// 写入什么
writer.write( document );
//关闭并释放资源
writer.close();*/
}
}
4.(改)修改一个学生.学号ITCAST_0001的学生年龄改为18
package cn.itcast.xml.dom4j; import java.io.FileWriter;
import java.util.List; import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class Demo4 {
// 修改一个学生.学号ITCAST_0001的学生年龄改为18
public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/student.xml");
// 通过文档对象获得 根节点
Element root = document.getRootElement();
// 1.获取到学生元素对象集合
List<Element> list = root.elements();
// 2.遍历集合
for (int i = 0; i < list.size(); i++) {
Element student = list.get(i);
// 通过number属性找出要修改的student对象
if (student.attributeValue("number").equals("ITCAST_0001")) {
// 3.设置student元素对象age子元素的文本为18
student.element("age").setText("18");
}
} // 将内存中的Document会写到文件中 // Pretty print the document to System.out
OutputFormat format = OutputFormat.createPrettyPrint();
// 创建一个xml的写入器. 构造函数中传入 写入的文件的位置和 格式化器
XMLWriter writer = new XMLWriter(
new FileWriter("src/student_copy.xml"), format);
writer.write(document);
writer.close(); /*
* //创建一个xml的写入器. 构造函数中传入 写入的文件的位置 XMLWriter writer = new XMLWriter( new
* FileWriter( "src/student_copy.xml" ) ); // 写入什么 writer.write(
* document ); //关闭并释放资源 writer.close();
*/
}
}
5.(删)删除学号ITCAST_0001的学生
package cn.itcast.xml.dom4j; import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter; import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class Demo6 {
// 删除学号ITCAST_0001的学生
public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/student.xml");
// 通过文档对象获得 根节点
Element root = document.getRootElement(); //1.获取要删除的学生元素(xpath)
String xpath = "//student[@number='ITCAST_0001']";
Element student = (Element) root.selectSingleNode(xpath);
//2.删除(找父节点删)
root.remove(student); // 将内存中的Document会写到文件中 // Pretty print the document to System.out
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK"); // 创建一个xml的写入器. 构造函数中传入 写入的文件的位置和 格式化器
XMLWriter writer = new XMLWriter(
new FileOutputStream(new File("src/stu.xml")), format);
writer.write(document);
writer.close(); /** //创建一个xml的写入器. 构造函数中传入 写入的文件的位置 XMLWriter writer = new XMLWriter( new
* FileWriter( "src/student_copy.xml" ) ); // 写入什么 writer.write(
* document ); //关闭并释放资源 writer.close();
*/
}
}
6.整合Xpath
package cn.itcast.xml.dom4j; import java.io.FileWriter; import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class Demo5 {
// 修改一个学生.学号ITCAST_0001的学生年龄改为18
public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read("src/student.xml");
// 通过文档对象获得 根节点
Element root = document.getRootElement();
// 定义xpath表达式
String xpath = "//student[@number='ITCAST_0001']"; // 通过表达式 选取对应的元素
Element student = (Element) document.selectSingleNode(xpath); //修改
student.element("age").setText("18"); // 将内存中的Document会写到文件中 // Pretty print the document to System.out
OutputFormat format = OutputFormat.createPrettyPrint();
// 创建一个xml的写入器. 构造函数中传入 写入的文件的位置和 格式化器
XMLWriter writer = new XMLWriter(
new FileWriter("src/student_copy.xml"), format);
writer.write(document);
writer.close(); /*
* //创建一个xml的写入器. 构造函数中传入 写入的文件的位置 XMLWriter writer = new XMLWriter( new
* FileWriter( "src/student_copy.xml" ) ); // 写入什么 writer.write(
* document ); //关闭并释放资源 writer.close();
*/
}
}
XML的DOM、SAX、DEMO4J及DEMO4J整合Path的代码例子的更多相关文章
- JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)
1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...
- 解析XML:DOM,SAX,PULL
Android解析XML有三种方式:DOM(document object model).SAX(simple api XML).PULL 1.DOM DOM解析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来 ...
- JavaScripts学习日记——DOM SAX JAXP DEMO4J XPath
今日关键词: XML解析器 DOM SAX JAXP DEMO4J XPath XML解析器 1.解析器概述 什么是解析器 XML是保存数据的文件,XML中保存的数据也需要被程序读取然后使用.那么程序 ...
- 解析XML文件的几种常见操作方法—DOM/SAX/DOM4j
解析XML文件的几种常见操作方法—DOM/SAX/DOM4j 一直想学点什么东西,有些浮躁,努力使自己静下心来看点东西,哪怕是回顾一下知识.看到了xml解析,目前我还没用到过.但多了解一下,加深点记忆 ...
- android解析XML总结(SAX、Pull、Dom三种方式) <转载>
android解析XML总结(SAX.Pull.Dom三种方式) http://www.cnblogs.com/JerryWang1991/archive/2012/02/24/2365507.htm ...
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
[目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...
- Android 通过Dom, Sax, Pull解析网络xml数据
这篇文章不是完全原创,XML解析的部分参考了 liuhe688 的文章.文章地址:http://blog.csdn.net/liuhe688/article/details/6415593 这是一个几 ...
- XML 解析---dom解析和sax解析
眼下XML解析的方法主要用两种: 1.dom解析:(Document Object Model.即文档对象模型)是W3C组织推荐的解析XML的一种方式. 使用dom解析XML文档,该解析器会先把XML ...
随机推荐
- 使用URL读取网络图片资源
URL(Uniform Resource Locator) 对象代表统一资源定位器. 代码如下: public class MainActivity extends ActionBarActivity ...
- BetWeen和模糊查询
--区分大小写性能比较低select * from Students where Age >1 and Age <4select * from Students where Age bet ...
- HashTable 及应用
HashTable-散列表/哈希表,是根据关键字(key)而直接访问在内存存储位置的数据结构. 它通过一个关键值的函数将所需的数据映射到表中的位置来访问数据,这个映射函数叫做散列函数,存放记录的数组叫 ...
- 【转】Qt 事件处理机制 (下篇)
转自:http://mobile.51cto.com/symbian-272816.htm 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生.分 ...
- [转]Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
http://blog.csdn.net/stpeace/article/details/39534361 进程间的通信方式有很多种, 上次我们说了最傻瓜的“共享外存/文件”的方法. 那么, 在本文中 ...
- span里设置高度
众所周知,SPAN元素内单纯设置height是没有效果的. 需要设置SPAN的高度,需要将其设置成block元素. display:block 但这样会导致span占据了整一行,我们通常不希望这样. ...
- thinkphp基础入门(1)
ThinkPHP目录如下,Application顾名思义就是应用的意思(我们的代码放在这里),Public就是公共文件的意思(主要放JS CSS 等前端资源文件),ThinkPHP文件是框架的核心包( ...
- dede 删除栏目文章后, 让ID从1开始
1)删除所有栏目,新建ID从1开始: ALTER TABLE `dede_arctype` AUTO_INCREMENT =1; 2)删除所有文章,新发布文章ID从1开始: ALTER TABLE ` ...
- MVC 中集成 AngularJS1
在 ASP.NET MVC 中集成 AngularJS(1) 介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 R ...
- Lua----注意事项
前言:Lua相对一般的语言相对简单,有c基础看一遍就差不多了.一般的代码都能够看懂.但是Lua也有一些自己的特点,区别与其他语言,这里需要注意一下. 1.数组下标 在Lua中数组下标是从1开始计数的. ...