`
jiaqian0118
  • 浏览: 554 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

xml的简单应用---读与写

阅读更多

简单讲解:

XML  eXtensible Markup Language 可扩展标记语言
      作用:保存数据,用于数据的传递
      常用于JAVA中框架的配置文件
1、XML的语法(掌握)
    a、xml 文件的第一行为声明
     <?xml version="" encoding=""?>
     <?xml:声明当前文档为xml文档
     version:版本号,1.0,1.1
     encoding:编码
 b、xml文件中总会有一对根元素
 c、xml的标记必须有结尾
 d、xml元素必须有正确的嵌套
 e、实体
  <:&lt;
  >:&gt;
  &:&amp;
 f、CDATA区:存储带有特殊字符的文本数据
  <![CDATA[
  ......
  ]]>
 g、注释
 h、xml标记名区分大小写,属性值必须使用""或'',
    属性通常需要给属性赋值
   
 满足xml文件语法的要求xml文件,称为格式良好的xml文件
 
 xml文档的解析器:浏览器,myeclipse,xml spy
  
2、DTD(Schema)(了解) 
   Document Type Definition
   作用:限制xml文件的结构
  
   编写DTD,可以在xml文件内部,也可以定义单独的
   DTD文件
  
   引入:DTD
   a、引入一定范围内的DTD
   <!DOCTYPE 根元素 SYSTEM URL>
   b、引入一个公共的DTD
   <!DOCTYPE 根元素 PUBLIC "名字" URL>
  
   dtd,xml需求:
   根元素:struts
   struts子元素:package,global-results零个或多个
   package元素中有三个属性,name,extends,namespace
   global-results中有两个属性,name,type
  
   package子元素:action,零个或多个
   action中三个属性:name(必须有),class(必须有),method
  
   action子元素:result,零个或多个
   result中有两个属性:name(必须有),type  
   <!ELEMENT struts .....>
   .........
   <!ATTLIST..... >
  
3、JAVA 解析XML(掌握)
 a、解析XML,获取数据
 b、java中的数据写入到XML文件中
 
 JAVA中提供两种解析方式
 DOM 解析  xml中的dom  java
 SAX 解析  
 jdom/dom4j

实例代码:

TestDom4jWrite.java

package com.tarena.tts;

import java.io.FileOutputStream;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;

public class TestDom4jWrite {
 public static void main(String[] args) throws Exception {
  // 创建一个空白的Document
  Document doc = DocumentHelper.createDocument();
  Element root = doc.addElement("books");
  for (int i = 0; i < 1000; i++) {
   Element book = root.addElement("book");
   book.addElement("name").setText("Name" + i);
   book.addElement("price").setText((int) (Math.random() * 100) + "");
  }

XMLWriter writer = new XMLWriter(new FileOutputStream(
    "d:/books.xml"));
  writer.write(doc);
  writer.close();
 }
}

TestDom4jRead.java

package com.tarena.tts;

import java.io.FileInputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class TestDom4jRead {
  public static void main(String[] args) throws Exception {
    // SAXReader 用于读取XML文档
    SAXReader reader = new SAXReader();
    // Document 用于封装整个XML文档
    Document doc = reader.read(new FileInputStream("d:/books.xml"));
    // Element 用于封装元素
    Element root = doc.getRootElement();

//System.out.println(root.getName());
    // List list = root.elements();
    List<Element> bookList = root.elements("book");
    for (Element book : bookList) {
      Element name = (Element)book.elements("name").get(0);
      System.out.println(name.getText());
    }

}
}
TestSAX.java

package com.tarena.tts;

import java.io.FileInputStream;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.AttributeList;
import org.xml.sax.HandlerBase;
import org.xml.sax.SAXException;

public class TestSAX {
  public static void main(String[] args) throws Exception {
    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser parser = factory.newSAXParser();
    parser.parse(new FileInputStream("d:/books.xml"), new MyHandler());

}

}

class MyHandler extends HandlerBase {
  @Override
  public void startElement(String name, AttributeList attributes)
      throws SAXException {
    System.out.println(name + "开始");
  }

@Override
  public void endElement(String name) throws SAXException {
    System.out.println(name + "结束");
  }

}


TestXPath.java

package com.tarena.tts;

import java.io.FileInputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class TestXPath {
 public static void main(String[] args) throws Exception {
  /*
   * XPath...
   */
  SAXReader reader = new SAXReader();
  Document doc = reader.read(new FileInputStream("d:/books_new.xml"));

List<Element> list = doc
    .selectNodes("/books/book[price>=80 and price<90]/name");

for (Element name : list) {
   System.out.println(name.getText());
  }

}
}

运行环境需要Jar包:

dom4j-1.6.1.jar
      jaxen-1.1-beta-6.jar

分享到:
评论

相关推荐

    xml入门教程/xml入门教程

    XML为其它应用程序准备的接口。 处理指令?&gt; 注释&lt;!-- 注释内容 --&gt; 空白符指空格、回车等 XML文件事例 &lt;?xml verson="1.0"?&gt;&lt;!--这一句一定要求写在文件的第一行--&gt; &lt;!--只能有一个根元素即那一对根...

    Tinyxml 源代码(VC6 & VS2005)

    简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。 XML的意思是“可扩展标记语言“(eXtensible Markup Language)。它允许你创建你自己的文档标记。在为浏览器标记文档...

    (全)传智播客PHP就业班视频完整课程

    雇员管理系统②-model1模式简单登录 9-19 3.雇员管理系统③-model1模式数据库登录 9-19 4.雇员管理系统④-model1模式雇员分页 9-19 5.雇员管理系统⑤-分层模式管理员登录 9-20 1.回顾 9-20 2.雇员管理系统⑥-分层...

    新版Android开发教程.rar

    • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • 集成的浏览器 基于开源的 WebKit 引擎 • 优化的图形库 包括定制的 2D 图形库, 3D 图形库基于 OpenGL ES 1.0 ...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    雇员管理系统②-model1模式简单登录 9-19 3.雇员管理系统③-model1模式数据库登录 9-19 4.雇员管理系统④-model1模式雇员分页 9-19 5.雇员管理系统⑤-分层模式管理员登录 9-20 1.回顾 9-20 2.雇员管理系统⑥-分层...

    史上最全传智播客PHP就业班视频课,8月份视频

    雇员管理系统②-model1模式简单登录 9-19 3.雇员管理系统③-model1模式数据库登录 9-19 4.雇员管理系统④-model1模式雇员分页 9-19 5.雇员管理系统⑤-分层模式管理员登录 9-20 1.回顾 9-20 2.雇员管理系统⑥-分层...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    雇员管理系统②-model1模式简单登录 9-19 3.雇员管理系统③-model1模式数据库登录 9-19 4.雇员管理系统④-model1模式雇员分页 9-19 5.雇员管理系统⑤-分层模式管理员登录 9-20 1.回顾 9-20 2.雇员管理系统⑥-分层...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    雇员管理系统②-model1模式简单登录 9-19 3.雇员管理系统③-model1模式数据库登录 9-19 4.雇员管理系统④-model1模式雇员分页 9-19 5.雇员管理系统⑤-分层模式管理员登录 9-20 1.回顾 9-20 2.雇员管理系统⑥-分层...

    JSP动态网站开发基础教程与实验指导(从基础到应用)光盘

    JSP动态网站开发基础教程与实验指导(从基础到应用)光盘 作者:王晓军 田中雨 刘跃军 等 全书共分12章,介绍了,JSP开发环境配置,页面组成元素,内置对象,访问数据库技术,JavaBean,Servlet技术,以及开发JSP...

    asp.net知识库

    XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术实现总结) 知识集锦:三分钟全面了解 Blog 和 RSS C#+ASP.NET开发基于Web的RSS阅读器 ASP.NET RSS Toolkit(RSS工具) ...

    SQL Server数据库企业应用系统开发

    【图书目录】 - SQL Server 数据库企业应用系统开发 第1部分 SQL Server Web应用概述 第1章 Web应用程序概述 1. 1 Web应用系统的主要特点 1. 2 Web应用程序的体系结构 1. 3 SQL Server2000与Web...

    零基础学ASP.NET 2.0电子书&源代码绝对完整版1

    App_Code\ MyLabel.cs 应用视图状态与控件状态。 8-05.aspx 测试控件状态与视图状态。 App_Code\ People.cs 实现记录个人基本信息的自定义控件。 App_Code\ Name.cs Name属性的自定义状态管理类。 第9章(\...

    单点登录源码

    单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ├── zheng-config -- 配置中心[端口:1001] ├── zheng-upms -- 用户权限管理系统 ...

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    开涛高可用高并发-亿级流量核心技术

    11.3 分布式缓存与应用负载均衡 222 11.3.1 缓存分布式 222 11.3.2 应用负载均衡 222 11.4 热点数据与更新缓存 223 11.4.1 单机全量缓存+主从 223 11.4.2 分布式缓存+应用本地热点 224 11.5 更新缓存与原子性 225 ...

    超级有影响力霸气的Java面试题大全文档

    例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...

    java开源包1

    该框架封装了线程处理、异步读/写等方面。 Java多线程程序死锁检查 JCarder JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 ...

    HibernateAPI中文版.chm

    19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...

    hibernate3.2中文文档(chm格式)

    19.2.4. 策略:非严格读/写缓存(Strategy: nonstrict read/write) 19.2.5. 策略:事务缓存(transactional) 19.3. 管理缓存(Managing the caches) 19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能...

Global site tag (gtag.js) - Google Analytics