1. 一,schema约束
  2. *dtd语法:<ELEMENT 元素名 约束>
  3. *schema符合xml的语法,xml语句
  4. **一个xml中可以有多个schema,多个schema使用名称空间区分(类似java包名)
  5. **dtd里面有PCDATA类型,但是在schema类面可以支持更多数据类型
  6. **schema更加复杂,不能替代dtd
  7. ()schema快速入门
    *w3c提供了属性和标签给schema
  8. *在schema文件里面,以<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itcast.cn/20151111" elementFormDefault="qualified"></schema>开头
  9. **xmlns:表示当前xml文件是一个约束文件
    **targetNamespace:可以通过这个地址引入约束文件
    *schema里面有多少元素就有多少个element
    例如必须含有:<element name="person"></element name="age"><element name="name"></element>
    *复杂元素:案例
    <element name="person"><complexType><sequence><element name="name" type="string"></element><element name="age" type="int"></element></sequence></complexType></element>
    *引入约束文件:
    *案例:<person xmlns:xsi="schema中xmlns属性-instance" xmlns="targetNamespace属性" xsi:schemaLocation="targetNamespace 空格 schema文档路径"></person>
    其中xsi这个是随意取的名,也可以是xss......
    <sequence></sequence>:元素出现的顺序
    <all></all>:元素只能出现一次
    <choice></choice>:只能有其中过一个出现
    <element name="age" type="int" maxOccurs="unbounded"></element>"表示元素出现的次数,此处是无限次
    <any></any>:表示任意元素
    *定义属性:
    <attribute name="id1" type="int" use="required">: 表示所有的元素必须有id1的属性
    name:属性名称
    type:属性类型
    use:是否必须出现
    (2)sax解析的原理
    *解析xml有两种技术 dom和sax
    *根据xml的层级结构在内存中分配一个树形结构
    *把xml中标签,属性,文本封装成对象
    *sax:事件驱动,边读边解析
    *SAXParser
    此类的实例可以从SAXParseFactory.newSAXParser();方法获得
    parse(File f,DefaultHandler dh);f:xml路径 dh:事件处理器
    *SAXParserFactory
  10.  
  1. -----------------------打印所有信息-----------------------
  2. public class TestJaxp {
  3. public static <DocumentBuildFactory> void main(String[] args) throws Exception
  4. {
  5.  
  6. //创建解析工厂
  7. SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
  8. //创建解析器
  9. SAXParser saxParser=saxParserFactory.newSAXParser();
  10. //执行parser方法
  11. saxParser.parse("src/NewFile.xml", new MyDefault());
  12. }
  13. }
  14.  
  15. class MyDefault extends DefaultHandler
  16. {
  17. @Override
  18. public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
  19. // TODO Auto-generated method stub
  20. System.out.print("<"+qName+">");
  21. }
  22.  
  23. @Override
  24. public void endElement(String uri, String localName, String qName) throws SAXException {
  25. // TODO Auto-generated method stub
  26. System.out.print("<"+qName+">");
  27. }
  28.  
  29. @Override
  30. public void characters(char[] ch, int start, int length) throws SAXException {
  31. // TODO Auto-generated method stub
  32. System.out.print(new String(ch,start,length));
  33. }
  1. ----------------得到某个元素的值-------------------
  2. public class TestJaxp {
  3. public static <DocumentBuildFactory> void main(String[] args) throws Exception
  4. {
  5.  
  6. //创建解析工厂
  7. SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
  8. //创建解析器
  9. SAXParser saxParser=saxParserFactory.newSAXParser();
  10. //执行parser方法
  11. saxParser.parse("src/NewFile.xml", new MyDefault());
  12. }
  13. }
  14.  
  15. class MyDefault extends DefaultHandler
  16. {
  17. boolean flag=false;
  18. @Override
  19. public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
  20. // TODO Auto-generated method stub
  21. if("TIME".equals(qName))
  22. {
  23. flag=true;
  24. //System.out.print("<"+qName+">");
  25. }
  26. }
  27.  
  28. @Override
  29. public void endElement(String uri, String localName, String qName) throws SAXException {
  30. // TODO Auto-generated method stub
  31. if("TIME".equals(qName))
  32. {
  33. flag=false;
  34. //System.out.print("<"+qName+">");
  35. }
  36.  
  37. }
  38.  
  39. @Override
  40. public void characters(char[] ch, int start, int length) throws SAXException {
  41. // TODO Auto-generated method stub
  42. if(flag==true)
  43. {
  44. System.out.print(new String(ch,start,length));
  45. }
  46.  
  47. }
  48. }
  1. ----------------------取第一个元素----------------------
    public class TestJaxp {
  2. public static <DocumentBuildFactory> void main(String[] args) throws Exception
  3. {
  4.  
  5. //创建解析工厂
  6. SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
  7. //创建解析器
  8. SAXParser saxParser=saxParserFactory.newSAXParser();
  9. //执行parser方法
  10. saxParser.parse("src/NewFile.xml", new MyDefault());
  11. }
  12. }
  13.  
  14. class MyDefault extends DefaultHandler
  15. {
  16. boolean flag=false;
  17. int idx=;
  18. @Override
  19. public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
  20. // TODO Auto-generated method stub
  21. if("TIME".equals(qName))
  22. {
  23. flag=true;
  24. //System.out.print("<"+qName+">");
  25. }
  26. }
  27.  
  28. @Override
  29. public void endElement(String uri, String localName, String qName) throws SAXException {
  30. // TODO Auto-generated method stub
  31. if("TIME".equals(qName))
  32. {
  33. flag=false;
  34. //System.out.print("<"+qName+">");
  35. idx++;
  36. }
  37.  
  38. }
  39.  
  40. @Override
  41. public void characters(char[] ch, int start, int length) throws SAXException {
  42. // TODO Auto-generated method stub
  43. if(flag==true && idx==)
  44. {
  45. System.out.print(new String(ch,start,length));
  46. }
  47.  
  48. }
  49. }

java 之 schema解析的更多相关文章

  1. JAVA与DOM解析器提高(DOM/SAX/JDOM/DOM4j/XPath) 学习笔记二

    要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载   sax.dom是两种对xml文档进行解析的方法(没有具体实现,只是接口),所以只有它们是无 ...

  2. java jar包解析:打包文件,引入文件

    java jar包解析:打包文件,引入文件 cmd下: jar命令:package包打包 javac命令:普通类文件打包 Hello.java: package org.lxh.demo; publi ...

  3. Java构造和解析Json数据的两种方法详解二

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面接着介绍用org.json构造和解析Jso ...

  4. java集合框架之java HashMap代码解析

     java集合框架之java HashMap代码解析 文章Java集合框架综述后,具体集合类的代码,首先以既熟悉又陌生的HashMap开始. 源自http://www.codeceo.com/arti ...

  5. Java注解全面解析(转)

    1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(Retentio ...

  6. 单例模式——Java EE设计模式解析与应用

    单例模式 目录: 一.何为单例 二.使用Java EE实现单例模式 三.使用场景 一.何为单例 确保一个类只有一个实例,并且提供了实例的一个全局访问点 1.1 单例模式类图               ...

  7. Java XML Dom解析工具

    Java XML Dom解析工具 缩进等 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); ...

  8. Java 面试知识点解析(二)——高并发编程篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  9. Java 面试知识点解析(三)——JVM篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

随机推荐

  1. 强化学习---TRPO/DPPO/PPO/PPO2

    时间线: OpenAI 发表的 Trust Region Policy Optimization, Google DeepMind 看过 OpenAI 关于 TRPO后, 2017年7月7号,抢在 O ...

  2. ArrayList与List性能测试

    理论:由于ArrayList存储数据存在装箱(读取数据存在拆箱),而泛型List<T>直接对T类型数据进行存储,不存在装箱与拆箱拆箱操作,理论上速度应该快一些. 废话少说,上代码. pub ...

  3. Java多线程-----线程池详解

    1. 线程池的实现原理 提交一个任务到线程池中,线程池的处理流程如下: 判断线程池里的核心线程是否都在执行任务,如果不是(核心线程空闲或者还有核心线程没有被创建)则创建一个新的工作线程来执行任务.如果 ...

  4. Differencia (归并树)

    归并树,与我们原学过的归并排序是一样的原理,但是在那个的基础上进行扩展应用.首先每个节点储存了它每个节点所代表的点的有序序列,还有就是每个点里面包含的所有的b[i]在左右子树的排名辅助更新数据,还有一 ...

  5. redis 性能建议

    因为 RDB 文件只用作后备用途,建议只在 Slave 上持久化 RDB 文件,而且只要15分钟一次就够了,只保留 save 900 1 这条规则. 如果 Enable AOF,好处是在恶劣请看下也只 ...

  6. numpy高级应用

    reshape重塑数组 ravel 拉平数组 concatenate 最一般化的连接,沿一条轴连接一组数组 # print(np.concatenate([arr1,arr2],axis = 0)) ...

  7. Hive分区表新增字段及修改表名,列名,列注释,表注释,增加列,调整列顺序,属性名等操作

    一.Hive分区表新增字段 参考博客:https://blog.csdn.net/yeweiouyang/article/details/44851459 二.Hive修改表名,列名,列注释,表注释, ...

  8. 20165316 预备作业3 Linux安装及学习

    Linux安装 我下载的是VirtualBox 5.2.6和Ubuntu 17.10.1,感觉这两个版本的兼容性不是太好,因为我在Oracle的官网社区中看到不少新版本的问题没有得到解决,而老版本(V ...

  9. AtCoder Beginner Contest 069 ABCD题

    题目链接:http://abc069.contest.atcoder.jp/assignments A - K-City Time limit : 2sec / Memory limit : 256M ...

  10. 判断是移动端还是PC端

    // 判断是移动端还是PC端 $http_user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USE ...