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 ...
随机推荐
- javascript 更改控件的class.
指定 className即可, 如通过id,可这样更改: document.getElementById("myDIV").className = "calssName& ...
- [BZOJ]3737 [Pa2013]Euler
从这个FB开始写博客啦. 也不知道会坚持多久…… = =似乎要加一句转载请注明出处 http://www.cnblogs.com/DancingOnTheTree/p/4026076.html htt ...
- Java中的List(转)
List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以Li ...
- 移植openssh到nuc951 evb板
移植openssh到nuc951 evb板 一 应用环境: 硬件:nuc951evb 软件:linux2.6.35 bsp 二 交叉编译openssl openssh 1.下载 openssl-1.0 ...
- 【Jquery EasyUI + Servlet】DataGrid,url请求带中文出现乱码的解决方案
demo.jsp: <% String name = "乱码"; %> $(function(){ $('#dg').datagrid({ url: 'DemoServ ...
- js中运算符的优先级
不确定下面表达式的运算顺序? a>b?c:d+e a&&b==c 看看下表就清楚了,下表按优先级从最高到最低的列出,具有相同优先级按从左至右的顺序求值. 运算符 描述 . [] ...
- HTML5 初始文档声明
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- SQLServer 2008 删除、压缩日志
SQL Server 2008删除或压缩数据库日志的方法 由于数据库日志增长被设置为“无限制”,所以时间一长日志文件必然会很大,一个400G的数据库居然有600G的LOG文件,严重占用了磁盘空间.由于 ...
- android http协议post请求方式
方式一:HttpPost(import org.apache.http.client.methods.HttpPost 代码如下: private Button button1,button2,but ...
- Java JDBC中,MySQL字段类型到JAVA类型的转换
1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案. 2. 类型映射 java.sql.Types定义了常 ...