XMLWord文档下载推荐.docx

上传人:b****6 文档编号:19474406 上传时间:2023-01-06 格式:DOCX 页数:28 大小:478.04KB
下载 相关 举报
XMLWord文档下载推荐.docx_第1页
第1页 / 共28页
XMLWord文档下载推荐.docx_第2页
第2页 / 共28页
XMLWord文档下载推荐.docx_第3页
第3页 / 共28页
XMLWord文档下载推荐.docx_第4页
第4页 / 共28页
XMLWord文档下载推荐.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

XMLWord文档下载推荐.docx

《XMLWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《XMLWord文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。

XMLWord文档下载推荐.docx

gender>

男<

/gender>

age>

22<

/age>

hobby>

钓鱼<

/hobby>

[CDATA[<

weight>

这是一个秘密<

/weight>

]]>

/student>

/astudent>

常用的约束技术:

XMLDTD、XMLSchema、XDR、SOX。

DTD

文档类型定义(DocumentTypeDefinition)是一套关于标记符的语法规则。

它是标准通用标记语言和[1] 

 

可扩展标记语言1.0版规格的一部分,是文档的验证机制。

文档类型定义是一种保证标准通用标记语言、可扩展标记语言文档格式正确的有效方法,可通过比较文档和文档类型定义文件来看文档是否符合规范,元素和标签使用是否正确。

约束xml书写的规范。

假如DTD位于XML源文件的外部,那么它应通过下面的语法被封装在一个DOCTYPE定义中:

DOCTYPE根元素SYSTEM"

文件名"

一个元素可以有多个属性,每个属性都有它自己的名称和取值,例如:

mytagname=“value”…/>

属性值一定要用引号(单引号或双引号)引起来。

属性名称的命名规范与元素的命名规范相同

元素中的属性是不允许重复的

语法:

ELEMENT元素名称使用规则>

使用规则:

(#PCDATA):

指示元素的主体内容只能是普通的文本.(ParsedCharacterData)

EMPTY:

用于指示元素的主体为空。

比如<

br/>

ANY:

用于指示元素的主体内容为任意类型。

(子元素):

指示元素中包含的子元素

定义子元素及描述它们的关系:

如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。

如:

ELEMENTFILE(TITLE,AUTHOR,EMAIL)

如果子元素用“|”分开,说明任选其一。

ELEMENTFILE(TITLE|AUTHOR|EMAIL)

用+、*、?

来表示元素出现的次数

如果元素后面没有+*?

:

表示必须且只能出现一次

+:

表示至少出现一次,一次或多次

*:

表示可有可无,零次或多次

表示零次或一次。

如:

ELEMENTMYFILE((TITLE*,AUTHOR?

EMAIL)*|COMMENT)>

IE5以上浏览器内置了XML解析工具:

Microsoft.XMLDOM,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd验证。

创建xml文档解析器对象

varxmldoc=newActiveXObject("

Microsoft.XMLDOM"

);

开启xml校验

xmldoc.validateOnParse="

true"

;

装载xml文档

xmldoc.load("

book.xml"

获取错误信息

xmldoc.parseError.reason;

xmldoc.parseError.line;

内部应用DTD

案例:

html文件(进行验证xml是否和dtd匹配)从结果看360浏览器不支持。

DOCTYPEHTMLPUBLIC"

-//W3C//DTDHTML4.01Transitional//EN"

"

http:

//www.w3.org/TR/html4/loose.dtd"

html>

head>

title>

再加一个html解析dtd<

/title>

script>

//创建xml文档解析器对象

varxmldoc=newActiveXObject("

//开启xml校验

xmldoc.validateOnParse="

//装载xml文档

xmldoc.load("

_2books.xml"

//获取错误信息

vara=xmldoc.parseError.reason;

varb=xmldoc.parseError.line;

document.write("

errorreasonis-----"

+a+"

"

+"

errrolineis-----"

+b);

/script>

/head>

body>

/body>

/html>

如果内部引用:

Xml文件

encoding="

UTF-8"

?

DOCTYPE书架SYSTEM"

_2books.dtd"

>

书架>

书>

<

书名>

水浒传<

/书名>

作者>

施耐庵<

/作者>

售价内部价="

60"

/售价>

/书>

三国演义<

&

wuchengen;

70"

西游记<

80"

红楼梦<

曹雪芹<

90"

/书架>

Dtd文件

ELEMENT书架(书+)>

ELEMENT书(书名,作者,售价)>

ELEMENT书名(#PCDATA)>

ELEMENT作者(#PCDATA)>

ELEMENT售价(#PCDATA)>

ATTLIST售价

内部价CDATA#REQUIRED

批发价(200|2000|20000)"

2000"

ENTITYwuchengen"

吴承恩"

运行xml

如果改动wuchengen为wucheng(即上面dtd定义实体的代码)则报错如下:

如何根据DTD中定义的内容来验证XML书写是否正确呢?

答:

需要软件程序,即解析器

根据能否对XML文档进行约束模式校验,可以将解析器分为两类:

非校验解析器,如IE

校验解析器

XML解析方式分为两种:

DOM方式和SAX方式

DOM:

DocumentObjectModel,文档对象模型。

这种方式是W3C推荐的处理XML的一种方式。

SAX:

SimpleAPIforXML。

这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。

XML解析开发包

JAXP:

是SUN公司推出的解析标准实现。

Dom4J:

是开源组织推出的解析开发包。

(牛,大家都在用,包括SUN公司的一些技术的实现都在用)

JDom:

JAXP:

(JavaAPIforXMLProcessing)开发包是JavaSE的一部分,它由以下几个包及其子包组成:

org.w3c.dom:

提供DOM方式解析XML的标准接口

org.xml.sax:

提供SAX方式解析XML的标准接口

javax.xml:

提供了解析XML文档的类

javax.xml.parsers包中,定义了几个工厂类。

我们可以通过调用这些工厂类,得到对XML文档进行解析的DOM和SAX解析器对象。

DocumentBuilderFactory

SAXParserFactory

调用DocumentBuilderFactory.newInstance()方法得到创建DOM解析器的工厂。

调用工厂对象的newDocumentBuilder方法得到DOM解析器对象。

调用DOM解析器对象的parse()方法解析XML文档,得到代表整个文档的Document对象,进行可以利用DOM特性对整个XML文档进行操作了。

关于自己写成一个java工具util可以调用(见视频)。

DOM解析:

要生成节点树木必须加载整个文档,容易造成内存溢出。

SAX解析:

读取单个节点,再去触发事件,占用内存小,适合读取xml,但是不适合做修改。

忘了<

(dom解析)

packagewangdom.test;

importjavax.xml.parsers.DocumentBuilder;

importjavax.xml.parsers.DocumentBuilderFactory;

importjavax.xml.parsers.ParserConfigurationException;

importorg.w3c.dom.Document;

importorg.w3c.dom.Node;

importorg.w3c.dom.NodeList;

publicclassDomtest{

publicstaticvoidmain(String[]args)throwsException{

DocumentBuilderFactorydbfactory=DocumentBuilderFactory.newInstance();

DocumentBuilderbuilder=dbfactory.newDocumentBuilder();

Documentdocument=builder.parse("

src/books.xml"

//找节点

NodeListlist=document.getElementsByTagName("

作者"

NodeauthorNode=list.item(0);

//找文本输出

System.out.println(authorNode.getTextContent());

}

}

(sax解析)

packagesaxmethod;

importjavax.xml.parsers.SAXParser;

importjavax.xml.parsers.SAXParserFactory;

importorg.xml.sax.Attributes;

importorg.xml.sax.SAXException;

importorg.xml.sax.helpers.DefaultHandler;

publicclassSaxtest{

//得到SAXParserFactory实例:

SAXParserFactoryfactory=SAXParserFactory.newInstance();

//共厂创建解析器SAXParser

SAXParserparser=factory.newSAXParser();

//下面new的是内部匿名类

parser.parse("

newDefaultHandler(){

publicvoidstartDocument()throwsSAXException{

System.out.println("

文档开始了哈"

publicvoidendDocument()throwsSAXException{

System.out.println("

文档结束了哈"

publicvoidstartElement(Stringuri,StringlocalName,StringqName,

Attributesattributes)throwsSAXException{

元素开始了哈"

publicvoidendElement(Stringuri,StringlocalName,StringqName)

throwsSAXException{

元素结束了哈"

publicvoidcharacters(char[]ch,intstart,intlength)

System.out.println(newString(ch,start,length));

}

});

………………………………………………………………………………

Book.java//此文档中的文档开始和文档结束没用到可以删掉。

//添加有参无参方法

publicclassBook{

privateStringbookname;

privateStringauthor;

privatedoubleprice;

publicStringtoString(){

return"

Book[bookname="

+bookname+"

author="

+author+"

price="

+price+"

]"

publicBook(Stringbookname,Stringauthor,doubleprice){

super();

this.bookname=bookname;

this.author=author;

this.price=price;

publicBook(){

publicStringgetBookname(){

returnbookname;

publicvoidsetBookname(Stringbookname){

publicStringgetAuthor(){

returnauthor;

publicvoidsetAuthor(Stringauthor){

publicdoublegetPrice(){

returnprice;

publicvoidsetPrice(doubleprice){

Saxtest2.java

importjava.util.ArrayList;

importjava.util.List;

importorg.xml.sax.XMLReader;

publicclassSaxtest2{

SAXParserparser=SAXParserFactory.newInstance().newSAXParser();

//得到xmlreader对象

XMLReaderreader=parser.getXMLReader();

finalList<

Book>

books=newArrayList<

();

//设置内容处理器

reader.setContentHandler(newDefaultHandler(){

Bookbook=null;

Stringnode=null;

publicvoidstartDocument()throwsSAXException{

}

publicvoidendDocument()throwsSAXException{

publicvoidstartElement(Stringuri,StringlocalName,

StringqName,Attributesattributes)throwsSAXException{

if("

书"

.equals(qName)){

book=newBook();

}

node=qName;

publicvoidendElement(Stringuri,StringlocalName,StringqName)

throwsSAXException{

books.add(book);

book=null;

node=null;

publicvoidcharacters(char[]ch,intstart,intlength)

书名"

.equals(node))

book.setBookname(newString(ch,start,length));

book.setAuthor(newString(ch,start,length));

售价"

book.setPrice(Double.parseDouble(newString(ch,start,length)));

}

});

//加载

reader.parse("

//遍历

for(Bookb:

books){

System.out.println(b);

}

}//下面出现70是因为上述xml文件改动了,加了一个70element。

packageunittest;

importorg.junit.Assert;

importorg.junit.Test;

publicclassJtest{

classMymath{

publicintadd(intx,inty){

returnx+y;

publicintmult(inta,intb){

returna*b;

Mymathmymath=newMymath();

@Test(timeout=1)//【判断是否超时单位是毫秒

//一定是无参无返回测试时点上方法也就是test1,然后raunas1junittest(实验证明不选上也可以的)

publicvoidtest1(){

intresult=mymath.add(10,20);

//可以加上一句断言(判断和结果是不是相等,可有可不有)

Assert.assertEquals(30,result);

//@Test是注解,当然还有beforeafter等。

@Test

publicvoidtest2(){

intresult=mymath.mult(10,20);

//可以加上一句断言(判断和结果是不是相等,可有可不有)

Assert.assertEquals(200,result);

NewXMLSchema.xsd文件

xs:

schemaxmlns:

xs="

//www.w3.org/2001/XMLSchema"

targetNamespace="

//www."

elementFormDefault="

qualified"

elementname='

书架'

complexType>

<

sequencemaxOccurs='

unbounded'

<

书'

<

<

sequence>

x

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1