一,schema约束
*dtd语法:<ELEMENT 元素名 约束>
*schema符合xml的语法,xml语句
**一个xml中可以有多个schema,多个schema使用名称空间区分(类似java包名)
**dtd里面有PCDATA类型,但是在schema类面可以支持更多数据类型
**schema更加复杂,不能替代dtd
()schema快速入门
*w3c提供了属性和标签给schema
*在schema文件里面,以<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itcast.cn/20151111" elementFormDefault="qualified"></schema>开头
**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
-----------------------打印所有信息-----------------------
public class TestJaxp {
public static <DocumentBuildFactory> void main(String[] args) throws Exception
{ //创建解析工厂
SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
//创建解析器
SAXParser saxParser=saxParserFactory.newSAXParser();
//执行parser方法
saxParser.parse("src/NewFile.xml", new MyDefault());
}
} class MyDefault extends DefaultHandler
{
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
System.out.print("<"+qName+">");
} @Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
System.out.print("<"+qName+">");
} @Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
System.out.print(new String(ch,start,length));
}
----------------得到某个元素的值-------------------
public class TestJaxp {
public static <DocumentBuildFactory> void main(String[] args) throws Exception
{ //创建解析工厂
SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
//创建解析器
SAXParser saxParser=saxParserFactory.newSAXParser();
//执行parser方法
saxParser.parse("src/NewFile.xml", new MyDefault());
}
} class MyDefault extends DefaultHandler
{
boolean flag=false;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
if("TIME".equals(qName))
{
flag=true;
//System.out.print("<"+qName+">");
}
} @Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
if("TIME".equals(qName))
{
flag=false;
//System.out.print("<"+qName+">");
} } @Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
if(flag==true)
{
System.out.print(new String(ch,start,length));
} }
}
----------------------取第一个元素----------------------
public class TestJaxp {
public static <DocumentBuildFactory> void main(String[] args) throws Exception
{ //创建解析工厂
SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
//创建解析器
SAXParser saxParser=saxParserFactory.newSAXParser();
//执行parser方法
saxParser.parse("src/NewFile.xml", new MyDefault());
}
} class MyDefault extends DefaultHandler
{
boolean flag=false;
int idx=;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
if("TIME".equals(qName))
{
flag=true;
//System.out.print("<"+qName+">");
}
} @Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
if("TIME".equals(qName))
{
flag=false;
//System.out.print("<"+qName+">");
idx++;
} } @Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
if(flag==true && idx==)
{
System.out.print(new String(ch,start,length));
} }
}

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. js原型链的说明

    首先需要明确的是:只有对象有__proto__属性,而函数只有prototype属性,没有__proto__属性,函数的原型有一个constructor属性,指向的是函数本身! Function是Ob ...

  2. 认识ZTree

    ZTree基本知识 zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. 一.最简单的树(标准的json数据): 1.set ...

  3. Vuejs vm对象详解

    Vuejs vm对象详解 vue数据是怎么驱动视图的?一堆数据放在那里是不会有任何作用的,它必须通过我们的View Model(视图模型)才能操控视图. 图中的model其实就是数据,一般我们写成js ...

  4. Python 监控脚本(硬盘、cpu、内存、网卡、进程)

    #磁盘使用率disk = psutil.disk_partitions()for i in disk:    print "磁盘:%s   分区格式:%s"%(i.device,i ...

  5. git getting started

    2019/4/25-- after committing to blessed. modify dependency file to download file so as to get latest ...

  6. 状态管理之cookie使用及其限制、session会话

    # 1.什么是状态管理? 将浏览器与web服务器之间多次交互当作一个整体来处理,并且将多次交互所涉及的数据(即状态)保存下来.(cookie浏览器所涉及到的访问数据保存下来)# 2.如何进行状态管理? ...

  7. P2219 [HAOI2007]修筑绿化带(单调队列)

    P2219 [HAOI2007]修筑绿化带 二维单调队列 写了这题 P2216 [HAOI2007]理想的正方形  后,你发现可以搞个二维单调队列 来保存矩形(i+1,i+A-1)(j+1,j+B-1 ...

  8. 运行android模拟器,emulator: ERROR: x86 emulation currently requires hardware acceleration!

    运行android模拟器,emulator: ERROR: x86 emulation currently requires hardware acceleration! 问题: 运行android模 ...

  9. 从技术专家到管理者的思路转变(V1)

    作为技术专家出身的管理者,是一种优势(你所做的很多决策可能比非技术出身的管理者更加具有可行性和性价比).也是一种劣势(你可能会过于自恋自己的技术优势).这取决于你在接下去的职业生涯中,如何取舍你的技术 ...

  10. Python语言知识总结

    1. 环境 1.1 Anaconda 抛弃python原生安装方式吧,使用Anaconda才是最省心的. 1.2 Miniconda Anaconda 太大了,Miniconda才是王道!下载链接:h ...