JavaWeb——Day01_2
2014-10-14 10:00
323 查看
*6.两种解析思想
XML编程:
l一个XML文件除了我们人去读写以外,我们希望可以通过程序去读写,利用程序去增删改查XML的过程就是XML编程
lCRUD:Create、Read、Update、Delete
Dom和Sax解析。
![](http://img.blog.csdn.net/20141014102219046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141014102911266?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141014102749984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
一般开发来看,sax解析常用。但是我们主讲dom解析。
android里面的xml解析是pull解析,是基于sax解析的。
*7.sax解析_dom4j解析入门
sax解析目前不做掌握,到了Android开发的时候,会回继续学习pull解析,这里只做一个演示。
演示一个sax解析。
![](http://img.blog.csdn.net/20141014104905870?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
--------------------------------------------------------------------上面是sax解析---------------------------------------------------
![](http://img.blog.csdn.net/20141014110059524?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
sax解析的步骤整理:
l使用SAXParserFactory创建SAX解析工厂
SAXParserFactoryspf = SAXParserFactory.newInstance();
l通过SAX解析工厂得到解析器对象
SAXParser sp = spf.newSAXParser();
l通过解析器对象得到一个XML的读取器
XMLReader xmlReader =sp.getXMLReader();
l设置读取器的事件处理器
xmlReader.setContentHandler(newMyContentHandler());
l解析xml文件
xmlReader.parse("book.xml");
关于sax解析,其他需要知道的:
![](http://img.blog.csdn.net/20141014113840453?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141014113850796?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141014113858734?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
----
![](http://img.blog.csdn.net/20141014114202659?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141014114211957?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
三、XML编程:利用java程序去增删改查(CRUD)xml中的数据
解析思想:
dom解析
sax解析
基于这两种解析思想市面上就有了很多的解析api
sun jaxp既有dom方式也有sax方式,并且这套解析api已经加入到j2se的规范中,意味这不需要导入任何第三方开发包就可以直接使用这种解析方式.但是这种解析方式效率低下,没什么人用.
dom4j 可以使用dom方式高效的解析xml.
pull
!!dom4j
导入开发包,通常只需要导入核心包就可以了,如果在使用的过程中提示少什么包到lib目录下在导入缺少的包即可
接下来 我们讲一下Dom4j技术。
![](http://img.blog.csdn.net/20141014114327203?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141014114512948?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
演示一下Dom4j。
l创建解析器:
SAXReader reader = newSAXReader();
l利用解析器读入xml文档:
Document document=reader.read(newFile("input.xml"));
l获取文档的根节点:
Element root =document.getRootElement();
*8.dom4j进行增删改查
![](http://img.blog.csdn.net/20141014223536947?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
增:
![](http://img.blog.csdn.net/20141014223716335?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141014224105297?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141014224143111?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141014224346585?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141014224426287?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
上面这种方法比较原始。
![](http://img.blog.csdn.net/20141014224432187?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141014224659449?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
改:
![](http://img.blog.csdn.net/20141014224649062?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
删除:
![](http://img.blog.csdn.net/20141014225118549?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
属性:
增属性:
![](http://img.blog.csdn.net/20141014225213805?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
改属性:
和上面一样,只是把值变了。
获取属性:
![](http://img.blog.csdn.net/20141014225338279?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
删除一个属性:
![](http://img.blog.csdn.net/20141014225520693?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
-------------小结------------------
*9.Schema之名称空间
Schema是另一种约束。dtd已经out了。
lXML Schema 也是一种用于定义和描述 XML文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性
lSchema与 DTD的比较:
•XML Schema符合XML语法结构。
•DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
•XML Schema对名称空间支持得非常好。
•XML Schema比XMLDTD支持更多的数据类型,并支持用户自定义新的数据类型。
•XMLSchema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
•XML Schema不能像DTD一样定义实体,比DTD更复杂,但XmlSchema现在已是w3c组织的标准,它正逐步取代DTD。
四、Schema -- xml的约束技术 --- 需要掌握名称空间的概念,会读简单的Schema就可以了,不需要大家自己会写
Schema是xml的约束技术,出现的目的是为了替代dtd
本身也是一个xml,非常方便使用xml的解析引擎进行解析
对名称空间有非常好的支持
支持更多的数据类型,并且支持用户自定义数据类型
可以进行语义级别的限定,限定能力大大强于dtd
相对于dtd不支持实体
相对于dtd复杂的多,学习成本比较的高
如何在xml中引入Schema --- !!!!!名称空间的概念:全世界独一无二的名字,用来唯一的标识某个资源,通常是公司的域名,只是名字而已并不真的表示资源的位置.
lXML Schema文件自身就是一个XML文件,但它的扩展名通常为.xsd。
l一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。
l和XML文件一样,一个XMLSchema文档也必须有一个根结点,但这个根结点的名称为Schema。
l编写了一个XMLSchema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,在XML Schema技术中有一个专业术语来描述这个过程,即把XMLSchema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束。
![](http://img.blog.csdn.net/20141015001746495?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
依据约束文档写实例文档:
![](http://img.blog.csdn.net/20141015001936990?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
怎么关联他们呢?
图、
两种书写对比:
![](http://img.blog.csdn.net/20141015003535767?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141015003748055?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141015003835230?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141015003735843?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141015003813968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
默认是qualified,如果写unqualified的话,只是跟元素绑定在schema上了。
如何在xml中引入Schema --- !!!!!名称空间的概念:全世界独一无二的名字,用来唯一的标识某个资源,通常是公司的域名,只是名字而已并不真的表示资源的位置.
~~~ Schema的语法---参照Schema的文档,了解即可
*10.Schema语法简介
l参看w3c文档
html css javas dom xml 都是w3c发布的。
![](http://img.blog.csdn.net/20141015004545260?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141015005428906?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20141015005640196?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG92ZXdhdGVybWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
约束文档:
实例文档:
XML编程:
l一个XML文件除了我们人去读写以外,我们希望可以通过程序去读写,利用程序去增删改查XML的过程就是XML编程
lCRUD:Create、Read、Update、Delete
Dom和Sax解析。
一般开发来看,sax解析常用。但是我们主讲dom解析。
android里面的xml解析是pull解析,是基于sax解析的。
*7.sax解析_dom4j解析入门
sax解析目前不做掌握,到了Android开发的时候,会回继续学习pull解析,这里只做一个演示。
演示一个sax解析。
package com.itheima.sax; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class SaxDemo1 { public static void main(String[] args) throws Exception { //1.获取解析器工厂 SAXParserFactory factory = SAXParserFactory.newInstance(); //2.通过工厂获取sax解析器 SAXParser parser = factory.newSAXParser(); //3.获取读取器 XMLReader reader = parser.getXMLReader(); //4.注册事件处理器 reader.setContentHandler(new MyContentHandler2() ); //5.解析xml reader.parse("book.xml"); } } //适配器设计模式 class MyContentHandler2 extends DefaultHandler{ private String eleName = null; private int count = 0; @Override public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { this.eleName = name; } @Override public void characters(char[] ch, int start, int length) throws SAXException { if("书名".equals(eleName) && ++count==2){ System.out.println(new String(ch,start,length)); } } @Override public void endElement(String uri, String localName, String name) throws SAXException { eleName = null; } } class MyContentHandler implements ContentHandler{ public void startDocument() throws SAXException { System.out.println("文档解析开始了......."); } public void startElement(String uri, String localName, String name, Attributes atts) throws SAXException { System.out.println("发现了开始标签,"+name); } public void characters(char[] ch, int start, int length) throws SAXException { System.out.println(new String(ch,start,length)); } public void endElement(String uri, String localName, String name) throws SAXException { System.out.println("发现结束标签,"+name); } public void endDocument() throws SAXException { System.out.println("文档解析结束了......."); } public void endPrefixMapping(String prefix) throws SAXException { // TODO Auto-generated method stub } public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub } public void processingInstruction(String target, String data) throws SAXException { // TODO Auto-generated method stub } public void setDocumentLocator(Locator locator) { // TODO Auto-generated method stub } public void skippedEntity(String name) throws SAXException { // TODO Auto-generated method stub } public void startPrefixMapping(String prefix, String uri) throws SAXException { // TODO Auto-generated method stub } }
--------------------------------------------------------------------上面是sax解析---------------------------------------------------
sax解析的步骤整理:
l使用SAXParserFactory创建SAX解析工厂
SAXParserFactoryspf = SAXParserFactory.newInstance();
l通过SAX解析工厂得到解析器对象
SAXParser sp = spf.newSAXParser();
l通过解析器对象得到一个XML的读取器
XMLReader xmlReader =sp.getXMLReader();
l设置读取器的事件处理器
xmlReader.setContentHandler(newMyContentHandler());
l解析xml文件
xmlReader.parse("book.xml");
关于sax解析,其他需要知道的:
----
三、XML编程:利用java程序去增删改查(CRUD)xml中的数据
解析思想:
dom解析
sax解析
基于这两种解析思想市面上就有了很多的解析api
sun jaxp既有dom方式也有sax方式,并且这套解析api已经加入到j2se的规范中,意味这不需要导入任何第三方开发包就可以直接使用这种解析方式.但是这种解析方式效率低下,没什么人用.
dom4j 可以使用dom方式高效的解析xml.
pull
!!dom4j
导入开发包,通常只需要导入核心包就可以了,如果在使用的过程中提示少什么包到lib目录下在导入缺少的包即可
接下来 我们讲一下Dom4j技术。
演示一下Dom4j。
package com.itheima.dom4j; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Dom4jDemo1 { public static void main(String[] args) throws Exception { //1.获取解析器 SAXReader reader = new SAXReader(); //2.解析xml获取代表整个文档的dom对象 Document dom = reader.read("book.xml"); //3.获取根节点 Element root = dom.getRootElement(); //4.获取书名进行打印 String bookName = root.element("书").element("书名").getText(); System.out.println(bookName); } }
l创建解析器:
SAXReader reader = newSAXReader();
l利用解析器读入xml文档:
Document document=reader.read(newFile("input.xml"));
l获取文档的根节点:
Element root =document.getRootElement();
*8.dom4j进行增删改查
增:
上面这种方法比较原始。
改:
删除:
属性:
增属性:
改属性:
和上面一样,只是把值变了。
获取属性:
删除一个属性:
-------------小结------------------
package com.itheima.dom4j; import java.io.FileOutputStream; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.junit.Test; public class Demo4jDemo2 { @Test public void attr() throws Exception{ SAXReader reader = new SAXReader(); Document dom = reader.read("book.xml"); Element root = dom.getRootElement(); Element bookEle = root.element("书"); //bookEle.addAttribute("出版社", "传智出版社"); // String str = bookEle.attributeValue("出版社"); // System.out.println(str); Attribute attr = bookEle.attribute("出版社"); attr.getParent().remove(attr); XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint()); writer.write(dom); writer.close(); } @Test public void del() throws Exception{ SAXReader reader = new SAXReader(); Document dom = reader.read("book.xml"); Element root = dom.getRootElement(); Element price2Ele = root.element("书").element("特价"); price2Ele.getParent().remove(price2Ele); XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint()); writer.write(dom); writer.close(); } @Test public void update()throws Exception{ SAXReader reader = new SAXReader(); Document dom = reader.read("book.xml"); Element root = dom.getRootElement(); root.element("书").element("特价").setText("4.0元"); XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint()); writer.write(dom); writer.close(); } @Test public void add()throws Exception{ SAXReader reader = new SAXReader(); Document dom = reader.read("book.xml"); Element root = dom.getRootElement(); //凭空创建<特价>节点,设置标签体 Element price2Ele = DocumentHelper.createElement("特价"); price2Ele.setText("40.0元"); //获取父标签<书>将特价节点挂载上去 Element bookEle = root.element("书"); bookEle.add(price2Ele); //将内存中的dom树会写到xml文件中,从而使xml中的数据进行更新 // FileWriter writer = new FileWriter("book.xml"); // dom.write(writer); // writer.flush(); // writer.close(); XMLWriter writer = new XMLWriter(new FileOutputStream("book.xml"),OutputFormat.createPrettyPrint()); writer.write(dom); writer.close(); } @Test public void find() throws Exception{ SAXReader reader = new SAXReader(); Document dom = reader.read("book.xml"); Element root = dom.getRootElement(); List<Element> list = root.elements(); Element book2Ele = list.get(1); System.out.println(book2Ele.element("书名").getText()); } }
*9.Schema之名称空间
Schema是另一种约束。dtd已经out了。
lXML Schema 也是一种用于定义和描述 XML文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性
lSchema与 DTD的比较:
•XML Schema符合XML语法结构。
•DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
•XML Schema对名称空间支持得非常好。
•XML Schema比XMLDTD支持更多的数据类型,并支持用户自定义新的数据类型。
•XMLSchema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
•XML Schema不能像DTD一样定义实体,比DTD更复杂,但XmlSchema现在已是w3c组织的标准,它正逐步取代DTD。
四、Schema -- xml的约束技术 --- 需要掌握名称空间的概念,会读简单的Schema就可以了,不需要大家自己会写
Schema是xml的约束技术,出现的目的是为了替代dtd
本身也是一个xml,非常方便使用xml的解析引擎进行解析
对名称空间有非常好的支持
支持更多的数据类型,并且支持用户自定义数据类型
可以进行语义级别的限定,限定能力大大强于dtd
相对于dtd不支持实体
相对于dtd复杂的多,学习成本比较的高
如何在xml中引入Schema --- !!!!!名称空间的概念:全世界独一无二的名字,用来唯一的标识某个资源,通常是公司的域名,只是名字而已并不真的表示资源的位置.
lXML Schema文件自身就是一个XML文件,但它的扩展名通常为.xsd。
l一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。
l和XML文件一样,一个XMLSchema文档也必须有一个根结点,但这个根结点的名称为Schema。
l编写了一个XMLSchema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,在XML Schema技术中有一个专业术语来描述这个过程,即把XMLSchema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束。
依据约束文档写实例文档:
怎么关联他们呢?
图、
两种书写对比:
默认是qualified,如果写unqualified的话,只是跟元素绑定在schema上了。
如何在xml中引入Schema --- !!!!!名称空间的概念:全世界独一无二的名字,用来唯一的标识某个资源,通常是公司的域名,只是名字而已并不真的表示资源的位置.
~~~ Schema的语法---参照Schema的文档,了解即可
*10.Schema语法简介
l参看w3c文档
html css javas dom xml 都是w3c发布的。
约束文档:
<?xml version="1.0" encoding="ISO-8859-1" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="www.itheima.com" elementFormDefault="qualified" > <xs:element name="shiporder"> <xs:complexType> <xs:sequence> <xs:element name="orderperson" type="xs:string"/> <xs:element name="shipto"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="item" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="note" type="xs:string" minOccurs="0"/> <xs:element name="quantity" type="xs:positiveInteger"/> <xs:element name="price" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="orderid" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:schema>
实例文档:
<?xml version="1.0" encoding="utf-8" ?> <itheima:shiporder xmlns:itheima="www.itheima.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="www.itheima.com shiporder.xsd" orderid="asdf" > <itheima:orderperson>asdf</itheima:orderperson> <itheima:shipto> <itheima:name>zzzz</itheima:name> <itheima:address>ssss</itheima:address> <itheima:city>sdfdf</itheima:city> <itheima:country>sdfdf</itheima:country> </itheima:shipto> <itheima:item> <itheima:title>sadfdsf</itheima:title> <itheima:note>sdfdsfdsf</itheima:note> <itheima:quantity>10</itheima:quantity> <itheima:price>100.99</itheima:price> </itheima:item> <itheima:item> <itheima:title>sadfdsf</itheima:title> <itheima:note>sdfdsfdsf</itheima:note> <itheima:quantity>10</itheima:quantity> <itheima:price>100.99</itheima:price> </itheima:item> </itheima:shiporder>
相关文章推荐
- javaweb-day01-1(建JAVA工程、断点调试、快捷键)
- javaweb-day01-4(DTD 的语法)
- JAVA_WEB_Day01
- javaweb-day01-5(XML 解析-概述)
- javaweb_day01
- java-web面试-2017-day01
- javaweb-day01-2(Junit测试工具用法)
- 我的传智播客之javaweb_day01学习总结
- JAVA WEB从入门到精通day01 HTML语言的学习
- JavaWeb——Day01_1
- javaweb-day01-7(XML 解析-案例)
- JavaWebStudio系列开发工具Visaul Struts版本简介
- 使用Java在Web上实现简易干特图之五
- 基于JAVA的WEB服务器工作机制(2)
- 使用Java在Web上实现简易干特图之六
- JavaServer Faces vs. ASP.NET WebForms
- Java Web Start 实现关键
- Linux 下 JAVA 的 Web 开发(环境搭建篇)
- 基于JAVA的WEB服务器工作机制(3)完
- 使用Java在Web上实现简易干特图之三