xml xsd命名空间定义

xml命名空间可以是任意的字符串,但往往是一个绝对的url地址,例如:http://www.abc.com/schema,命名空间语法是:

xmlns[:prefix]="命名空间字符串"。

例如,orderlist.xsd定义:

------------------

<?xml version="1.0"?>
<
xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"targetNamespace=http://www.abc.com/schema/list xmlns="http://www.abc.com/schema/list" elementFormDefault="unqualified" >
 <xsd:attributeGroup name="OrderTypeAttributes">
        <xsd:attribute name="ID" type="xsd:string"/>
        <xsd:attribute name="Num" type="xsd:integer"/>
    </xsd:attributeGroup>

    <xsd:complexType name="OrderType">
        <xsd:attributeGroup ref="OrderTypeAttributes"/>
    </xsd:complexType>
    
    <xsd:complexType name="OrderListType">
        <xsd:sequence>
            <xsd:element name="Order" type="OrderType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:element name="OrderList" type="OrderListType"/>

</xsd:schema>

 

 

1.elementFormDefault用于指定xml使用局部元素时是否需要加上前缀,等于"qualified"时需要,用“unqualified”不需要,elementFormDefault对全局元素不起作用,全局元素在任何情况下都要加上前缀限定,除非默认了其命名空间。attributeFormDefault与elementFormDefault类似,attributeFormDefault用于指定xml的局部属性引用规则。

orderlist.xml如下:

-----------------

<?xml version="1.0"?>
<p1:OrderList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xmlns:p1="http://www.abc.com/schema/list"

     xsi:schemaLocation="http://www.abc.com/schema/list orderlist.xsd">
    <p1:Order ID="abc" Num="1"></p1:Order>
    <p1:Order ID="def" Num="2"></p1:Order>
<
/p1:OrderList>

注意:schemaLocation指定xsd存放路径,这里采用相对路径,schemaLocation="http://www.abc.com/schema/list orderlist.xsd"是指定上面定义的xmlns:p1="http://www.abc.com/schema/list"命名空间的xsd文件的访问路径。如果引入多个命名空间可以如下定义:

<p1:OrderList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xmlns:p1="http://www.abc.com/schema/list"

     xmlns:p2="http://www.abc.com/schema/order"

     xsi:schemaLocation="http://www.abc.com/schema/list orderlist.xsd

                         http://www.abc.com/schema/order order.xsd">

 


2.如果是elementFormDefault="unqualified"则不用加前缀,orderlist.xml如下:

-----------------

<?xml version="1.0"?>
<
p1:OrderList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

     xmlns:p1="http://www.abc.com/schema/list"

     xsi:schemaLocation="http://www.abc.com/schema orderlist.xsd">
    <Order ID="abc" Num="1"></Order>
    <Order ID="def" Num="2"></Order>
<
/p1:OrderList>

 

3.targetNamespace,目标命名空间,指定本xsd命名空间,也可以理解成本xsd给该命名空间定义类型。xmlns是引入默认命名空间,如上面xsd,targetNamespace=http://www.abc.com/schema/listxmlns="http://www.abc.com/schema/list"  意思是给http://www.abc.com/schema/list命名空间定义类型,并引入http://www.abc.com/schema/list命名的类型,该命名空间没有前缀限定,作为默认命名空间,因此在该xsd文档中应用自身定义的类型就不用再加上前缀限定了(targetNamespace属性值和xmlns属性值如果相等,则文中引用本文的类型不用加前缀限定)。

可以不指定命名空间——无命名空间

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

</xsd:schema>

或者:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns=http://www.chance.com/schema/list 
    
xmlns:order=
"http://www.abc.com/schema/order"
    elementFormDefault=
"unqualified"
    attributeFormDefault=
"unqualified">

</xsd:schema>

但对无命名空间的xsd的引用会有些限制。

 

4.include 元素和 import 元素之间的区别在于:import 元素允许从具有不同目标命名空间的架构文档引用架构组件,而 include 元素则将其他具有相同目标命名空间(或没有指定的目标命名空间)的架构组件添加到包含架构。简言之,import 元素允许您使用不同目标命名空间(或没有指定的目标命名空间)架构的架构组件,并且被导入和导入的文档不能同时没有命名空间,include 元素允许您将所包含架构的所有组件添加到包含架构中。

 

include例子:

--------------

http://www.abc.com/schema的order.xsd如下:

<?xml version="1.0"?>
<
xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    targetNamespace=
"http://www.abc.com/schema" 
    xmlns=
"http://www.abc.com/schema" 
    elementFormDefault=
"unqualified"
    attributeFormDefault=
"unqualified">

    <xsd:simpleType name="ClassType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="日用品"/>
            <xsd:enumeration value="笔"/>
            <xsd:enumeration value="纸"/>
            <xsd:enumeration value="文件夹"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="OrderType">
        <xsd:all minOccurs="1">
            <xsd:element name="Class" type="ClassType"/>
            <xsd:element name="Num" type="xsd:int"/>
            <xsd:element name="Date" type="xsd:date"/>
        </xsd:all>
        <xsd:attribute name="ID" type="xsd:string" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="OrdersType">
        <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="Order" type="OrderType"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="Orders" type="OrdersType"/>

<
/xsd:schema>

 

http://www.abc.com/schema的orderlist.xsd如下:

<?xml version="1.0"?>
<
xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    targetNamespace=
"http://www.abc.com/schema"
    xmlns=
"http://www.abc.com/schema"
    elementFormDefault=
"unqualified"
    attributeFormDefault=
"unqualified">
    
    <xsd:include schemaLocation="order.xsd"/>

    <xsd:attributeGroup name="OrderTypeAttributes">
        <xsd:attribute name="ID" type="xsd:string"/>
        <xsd:attribute name="Class" type="ClassType"/>
        <xsd:attribute name="Num" type="xsd:integer"/>
    </xsd:attributeGroup>

    <xsd:complexType name="OrderType2">
        <xsd:attributeGroup ref="OrderTypeAttributes"/>
    </xsd:complexType>
    
    <xsd:complexType name="OrderListType">
        <xsd:sequence>
            <xsd:element name="Order" type="OrderType2" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:element name="OrderList" type="OrderListType"/>

<
/xsd:schema>  

注意:两个文件的命名空间都是http://www.abc.com/schema,orderlist.xsdorder.xsd包含进来就相当于是一个文件了,在一个个文件里不能包含两个相同的类型,因此主要把orderlist.xsd里的OrderType改成OrderType2

 

 

import例子:

--------------

http://www.abc.com/schema/order的order_import.xsd如下:

<?xml version="1.0"?>
<
xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    targetNamespace=
"http://www.abc.com/schema/order" 
    xmlns=
"http://www.abc.com/schema/order" 
    elementFormDefault=
"unqualified"
    attributeFormDefault=
"unqualified">

    <xsd:simpleType name="ClassType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="日用品"/>
            <xsd:enumeration value="笔"/>
            <xsd:enumeration value="纸"/>
            <xsd:enumeration value="文件夹"/>
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="OrderType">
        <xsd:all minOccurs="1">
            <xsd:element name="Class" type="ClassType"/>
            <xsd:element name="Num" type="xsd:int"/>
            <xsd:element name="Date" type="xsd:date"/>
        </xsd:all>
        <xsd:attribute name="ID" type="xsd:string" use="required"/>
    </xsd:complexType>

    <xsd:complexType name="OrdersType">
        <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="Order" type="OrderType"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="Orders" type="OrdersType"/>

<
/xsd:schema>

 

http://www.abc.com/schema的orderlist_import.xsd如下:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    targetNamespace=
http://www.chance.com/schema/list
    xmlns=
http://www.chance.com/schema/list 
    
xmlns:order=
"http://www.abc.com/schema/order"
    elementFormDefault=
"unqualified"
    attributeFormDefault=
"unqualified">


    <!--上面需要指定命名空间别名,然后这里指定xsd文件url-->
    <xsd:import namespace="http://www.abc.com/schema/order"schemaLocation="order_import.xsd"/>

    <xsd:attributeGroup name="OrderTypeAttributes">
        <xsd:attribute name="ID" type="xsd:string"/>
        <xsd:attribute name="Class" type="order:ClassType"/>
        <xsd:attribute name="Num" type="xsd:integer"/>
    </xsd:attributeGroup>

    <xsd:complexType name="OrderType">
        <xsd:attributeGroup ref="OrderTypeAttributes"/>
    </xsd:complexType>
    
    <xsd:complexType name="OrderListType">
        <xsd:sequence>
            <xsd:element name="Order" type="OrderType2" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    
    <xsd:element name="OrderList" type="OrderListType"/>

<
/xsd:schema>

注意:两个xsd的命名空间不一样:http://www.abc.com/schema/order http://www.abc.com/schema/list,改成一样会报错。 <xsd:attribute name="Class" type="order:ClassType"/>加上了order前缀限定。

 

5.redefine是include的增强版,用法和include一样,不过它允许在当前文档中重新定义类型覆盖redefine里的类型,不过重定义只允许对原有类型进行限制和扩展,重定义不能违反原有约束。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[实验目的] 1、学习如何使用XMLSPY集成开发环境完成XML Schema相关的开发工作。 2、掌握XML Schema与DTD之间的区别,能够完成两者之间的转换;掌握在XML Schema中如何定义元素和属性,如何使用限制、列表和合并派生自己的简单数据类型,如何定义复杂数据类型,全局/局部元素和数据类型之间的区别;如何将XML Schema文档关联到XML实例数据文档,并完成文档的有效性验证。 3、掌握如何准确定义数据之间的参照完整性约束,如何在模式中使用多态性支持,如何在文档中定义空值等等。 [实验内容和步骤] 1、使用XMLSPY集成开发环境,新建XML Schema文档,在各种不同的编辑视图中尝试采用不同的方式完成XML Schema文档的编辑和查看;并使用XMLSPY提供的便利,建立XMLSchema两者之间的关联,进行XML文档的良构以及有效性验证。 2、严格按照下图给出的文档模型,在XML Schema编辑环境的Schema视图中完成book.xsd的编写(不要使用Text视图进行编写): 在上图中,没有指定简单类型元素和属性的数据类型,请根据合理的情况,完成数据类型的创建(至少使用到限制方式中的三种以上的限制方面),请在IDE的Details视图->type和Facets中完成上述任务。 在上图中,有三个title元素分别表示book、section和figure的标题,请定义下述类型: titleType:1-100个字符的文本; bookTitleType:titleType类型限制派生的子类型,要求取枚举值“Data On the Web”、“TCP/IP Illustrated”等; sectionTitleType:titleType类型限制派生的子类型,要求必须形如“1.xxxx”、“1-1.xxxx”等等(表示第一节、第一节下面的第一节等等,注意section是递归的形式); figureTitleType:titleType类型限制派生的子类型,要求必须形如“1-1.xxxx” 、“1-1-1.xxxx”(表示第一节中的第一个图、第一节下面的第一节的第一个图等等); 然后编写book.xml,并使用多态性(即所有title的类型均为titleType,而数据实例中指明具体类型),请确保通过文档有效性验证。 3、在上次的DTD实验中,我们编写了SpyBase1.xml、SpyBase2.xml、以及SpyBase1.dtd和SpyBase2.dtd,这次需要完成SpyBase1.xsd和SpyBase2.xsd,建立模式与数据之间的关联,并进行文档有效性验证。在编写的XSD文档SpyBase1.xsd中,要求使用key/keyref描述数据的实体完整性以及数据之间的参照完整性(SpyBase2.xml不需要,因为已经使用嵌套消除了参照关系)。 [实验思考] 与ID/IDREF相比,key/keyref有哪些优点,在使用上有何不同? 假设SpyBase1.xml中的alias、mission、spy来自不同的命名空间中,如何在Schema中对其进行限定,请在XMLSPY中完成相应的xsd文档?修改SpyBase1.xml,并验证新的SpyBase1_2.xsd是否正确? [提交时间及内容] 最后提交时间 2013年?月?日 提交内容 提交book.xsd、book.xml(使用多态)。 提交SpyBase1. xsd、SpyBase2. xsd
&1.XML简介 XML的背景 1) XML代表可扩展的标记语言(eXtensible Markup Language); 2) XML由W3C联盟发展维护; 3) XML是一种元语言,可以用来定义其它标签语言; 4) XML没有定义任何标记,它提供了一种工具定义标记以及它们之间的结构关系; 5) XML是一种用于结构化文本交换的标记语言; 6) XML代表了内容的结构也代表了内容本身; 7) XML继承自SGML(标准通用标记语言)。SGML的前身GML由IBM在1960年发明,用于描述设备无关的文本 8) XML是SGML的子语言,由SGML简化而来,起初的目的是为Web的结构文档提供服务。 9) W3C组织在1998年2月10日发布XML1.0版,第二个版本发布于2000年10月9日。 10)XML是分层的树形结构的自解释的一种可扩展的标记语言。 XML和HTML的关系 1) 事实上,HTML和XML不能够进行比较的。因为XML是一种元语言,而HTML是一种定义好的标记语言。XML是描述数据的语言,HTML是描述数据 外观的语言。 2) HTML有一套确定的标记。在W3C标准规范中定义了HTML标记的含义并由部分浏览器实现了。 3) HTML标记非常适合描述人类易读的可视化文本。 4) HTML定义了许多表现指令用以优化在浏览器中的显示。 5) 在HTML标记中,数据固有的结构丢失了。 6) HTML没有维持数据类型信息的完整性、约束、或实体间的其它关系,而XML提供了这些特征。 对XML文件的要求,格式良好(符合XML的语法要求),有效的XMLXML的用途,数据传输的中间件,做为通用文档格式 1,数据交换 2,web服务 3,内容管理 4,web集成 5,充当配置文件 格式良好的XML文件的规范 XML文档是一种严格规范的语言,必须按照规范来写。 XML文档的框架结构 XML文档=序言+元素+杂项(可选) 1)序言 序言=(XML声明)+(杂项)+(文档类型声明) XML声明 如: 文档类型声明 规定元素的结构和属性列表的取值 如: 2)元素 空元素 非空元素 内容 内容=(子元素|字符数据|字符数据段|引用|处理指令|注释)* 字符数据 字符数据中,不能含有&,,',",需要采用实体引用的方式 字符数据段 引用 3)杂项 处理指令 XML为其它应用程序准备的接口。 注释 空白符指空格、回车等 XML文件事例 ... XML文件的写法 xml文档是有标签和标签中的内容组成的,标签和标签中的内容合成为元素 非空元素 (起始标签) aaa(内容) (结束标签) 空元素 格式良好的XML文档的规范 1)文档声明位于文件的开头 2)文档中只能定义一个唯一的根元素(根元素是在文档声明之后的最外层的元素) 3)标签必须闭合,且不能交叉,有元素的起始标签,就必须有其结束标签(空元素除外) 4)层层嵌套,每一对标签总是出于另一对标签的内或和其处于同一层,不能交叉(根元素chuw) 5)大小写敏感,起始标签和结束标签的名字要一致 6)属性值必须用引号引起来 7)注意特殊字符,使用时需要使用转义字符。 注意: 1.第一行一定要写 2.xml文件是由元素和元素的内容以及属性组成的,一个xml文件中只能有一个根元素,标签和标签的内容加在一起叫作一个元素。xml是大小写 敏感的,只能以字母或下划线开头。 字符转义 < 代表 "" , " 代表双引号。 &amp 代表 "&" , &apos; 代表单引号 字符数据段,不解析 ....的部分不必使用转义,其中内容会直接输出。 引用 实体声明 使用实体,引用 &引用名 事例: (XML文件的声明) (注释) (根元素) (子元素) b) then {return 1} else{return 0} }]]> (空元素) 张三 XSLT,是用于对XML进行文档格式转换,把一个XML文档转换成另一种格式的XML文档,但是其中内容是不变的。 &2.DTD(Document Type Difinition DTD文档是用于规定XML文档的结构。只有结构符合所引用的DTD文件的XML文件才能称之为有效的XML文件。 DTD(文档类型定义) !DOCTYPE 定义DTD文件名 !ELEMENT 定义元素中可用的数据类型 #PCDATA 可解析字符串。 1)DTD的调用 方式一:调用内部文档类型定义。 <!DOCTYPE studinfo[]> 注意点: (1) studinfo与(#PCDATA)有空格 (2) 文档类型名与根元素名必须一致 方式二:调用外部文档类型定义,需要写一个DTD文档 注意点: (1)standalone="no" (2)注意dtd文件的路径 2)DTD的结构 1.元素类型声明 指明元素的名称和元素含有的内容。 元素类型声明= 元素内容说明='EMPTY'|'ANY'|混合内容|元素内容|'#PCDATA' #PCDATA: 只有可析的字符数据才能作为元素的内容 元素内容: 元素内部只能出现指定的子元素 事例:带有子元素的元素结构定义 "?" 表示子元素只可以出现一个,也可以不出现 (0到1) "+" 表示子元素必须出现,可以出现多个 (1到多) "*" 表示子元素可以出现多个,也可以不出现,(0到多) Enumerated:枚举类型,由“|”分隔的可能的子元素,在可能出现的子元素中只能有一个出现。 EMPTY:元素内容为空时才写(空元素,其中不能有内容) (无子元素) ANY:元素内容可以任意,也可以为空 混合内容:标记文本和可析字符串 2.元素属性表声明 属性:由“=”分隔的成对的属性名和属性值构成,只能出现在元素标记的内部。 结束标记不能带属性,一个元素可以具有多个属性 语法: 属性取值类型 1、CDATA:可析字符(文本) 2、Enumerated:枚举类型,由“|”分隔的可能的属性值列表 属性默认值: 注意 1、#REQUIRED:必须提供属性值 2、IMPLIED:可提供也可不提供 3、FIXED:不能修改 事例: zhangshan 实体声明 实体:存储了任意符合规则的xml文档单元片断。 1、内部通用实体 定义格式 引用格式 &实体名; 2、外部通用实体 定义格式 引用格式 &实体名; 事例: <!DOCTYPE studinfo[ ]> zhangshan 20 beijing haidian &schoolinfo; 记号声明 用记号标识非xml格式的数据 定义格式 3)DTD的缺陷,DTD中的类型比较少,有一些约束在DTD中是表达不了的,DTD不支持XML语法. &3.NameSpace(命名空间) namespace是为了解决XML文档中的命名冲突问题的。 DTD不支持命名空间,解析器无法测试命名空间。 1、作用: 解决XML文档中命名冲突的问题,即将 XML文档与引用URI标识的名域相结合,来 限定其中的元素和属性名。 示例: t1 man s1 girl 2、名域的声明 (1)直接定义 xmlns:名域前缀="名域的URI"(唯一性) 类比:名字与身份证 名域的使用,名域前缀:需要限定的元素名 示例: zhangshan man stu1 girl (2)缺省定义 xmlns=名域的URI zhangshan man stu1 girl 3、名域的使用 (1)用名域限定元素 zhangshan man stu1 girl (2)用名域限定属性 zhangshan man caoyang,no1 stu1 girl haidian,no2 4、名域的作用范围 名域能够把声明它的元素和该元素的所有子元素关联起来,除非它们被其他的名域声明所覆盖。 &XML Schema Schema 也是XML文档,用于定义XML文档的结构。 目标名域 使用目标名域中的限制,要只用这个schema文件结构生成XML文档中必须使用者个默认名域。 schema文件的扩展名为 .xsd schema文档的语法和XML的语法相同。 schema文档也有根元素,根元素为schema。 参照类型约束,来约束元素的内容 元素的默认和固定值 1) 简单元素可以有一个默认或固定值: 2) 当没有指定值时,一个默认的值自动分配给元素。在这个例子中,默 认值为red: 3) 一个固定值也是自动分配给元素的,你不能指定 其它值。在这个例子中,默认值为red: ref关键字 参照....定义。 属性结构的定义,属性也可以使用固定值或者是默认值 schema文件中也可以定义元素结构和类型,schema文件中对元素内容加以限制 schema中可以定义元素内容类型 1. 简单类型 2. 自定义类型,复杂类型,子元素组合 简单类型,基本类型加限制 simpleType:简单类型定义 restriction:基本类型引用 enumeration:使用枚举类型,从给定值中选择且必选其一。 minInclusive:简单类型加最小值约束,且包含设定的最小值 maxExclusive:简单类型加最大值约束,且包含设定的最大值 以下是其使用的事例 . 简单类型加限制 只能使用非负整数3到7包含3和7。 . 复杂类型定义 复杂类型定义事例: 整体schema文档事例 演示simpleType用法,即自定义类型 学生(id = "1000") 姓名 年龄(必须是int,并且只能取一定范围的值) 父亲(父母二者选一) 母亲 专业(枚举类型) 知识点: simpleType restriction enumeration minInclusive maxExclusive 针对以上schema文件的有效的XML文件事例 shang zhang 30 lishi computer XML文档的解析 SAX :事件机制驱动。在遇到相应的节点时,会发出一个事件,当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。 SAX的优缺点:   优点: 不用事先调入整个文档,占用资源少; SAX解析器代码比DOM解析器代码小,适于Applet,下载   缺点: 不是持久的;事件过后,若没保存数据,那么数据就丢了,比较消耗时间; 只能顺序处理,不能选择读取。不支持文档的创建和修改。 无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;   使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少 SAX处理流程 UNIX color 分析这个代码片断的 SAX 处理器一般情况下将产生以下事件: startDocument() startElement (samples) characters (white space) startElement (server) characters (UNIX) endElement (server) characters (white space) startElement (monitor) characters (color) endElement (monitor) characters (white space) endElement (samples) SAX API 允许开发人员捕捉这些事件并对它们作出反应。 SAX 处理涉及以下步骤: 创建一个事件处理程序。 创建 SAX 解析器。 向解析器分配事件处理程序。 解析文档,同时向事件处理程序发送每个事件。 要实现SAX解析XML文档的方法, XMLReader和XMLReaderFactory XMLReader read=XMLReaderFactory.createXMLReader();生成XMLReader对象, 使用XMLReader对象的方法parse(File f,ContentHandler handler),ContentHandler是一个定义好事件处理方法的接口, DTDHandler ,EntityResolver ,ErrorHandler这三个接口和 ContentHandler接口相同,但是其中定义的是其他事件处理方法,一般只是实现ContentHandler接口。 使用SAX解析XML文档,需要先有SAXParserFactory对象,他的对象是通过自身的静态方法newInstance(),然后再通过SAXParserFactory对象来创建SAXParser对象,使用SAXParser对象的 parse(File f,DefaultHandler handler),DefaultHandler是用来处理解析时发出的事件的类,就可以进行解析。DefaultHandler实现了ContentHandler,DTDHandler ,EntityResolver ,ErrorHandler,四个接口,但是只给出了空实现,便于使用者覆盖相应的方法。 SAX解析的其他方法请参阅JAVA API文档。(javax.xml.parsers ,org.xml.sax ,org.xml.sax.helpers) DOM (文档对象模型)Document Object Modle 为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。   优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;   缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;   使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU) DOM解析是将整个的XML文档元素结构读入内存,由根元素向下形成子元素分级树状关系。 DOM的解析 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(name); 以上三行代码,使用来生成Document对象的,Document对象就代表了读入内存后结构化的XML文档。 使用Document对象的getDocumentElement()方法获得子节点,可以通过不断的迭代便利所有节点,这些节点就代表了元素,从根元素开始一直到最内层的子元素。 getElementsByTagName(String tagname) 这个方法可以通过元素的名来或得该元素内层元素,也就是或得了这个节点的所有子节点(NodeList)NodeList的方法getLength()(列表中的节点数),通过循环使用 Node item(int index) (返回集合中的第 index 个项)方法,来获得每个子节点。 DOM解析的其他方法请参阅JAVA API文档。(org.w3c.dom) 选择 DOM 还是选择 SAX,这取决于下面几个因素: 应用程序的目的: 数据容量: 数据多少部分会被使用 对速度的需要: DOM4j,JDOM 开源的XML文档解析器,实现DOM,SAX接口,保留了DOM和SAX的基本语法,对解析性能进行了优化。 JDOM 需要jdom.jar和 JDOM的背后使用的是使用SAX对文件进行扫描的。 SAXBuilder builder=new SAXBuilder();//创建解析器 使用SAX扫描之后的结果保存成DOM结构的树。JDOM对解析过程作了简化。 JDOM中的方法便的更加易用。例如:getRootElement(),getChildren("...")方法的返回值是java.util.List类型,getText()方法直接可以返回元素中的内容,他的返回值类型是String类型。 JDOM也可以对XML文档进行写操作。 XMLOutputter类的对象可以向文件中写信息,setEncoding("")设置内码,setNewLine(true),设置换行。output(Document docFileWriter write)方法可以向文件中写入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值