现在的位置: 首页 > 综合 > 正文

XML学习

2013年09月15日 ⁄ 综合 ⁄ 共 7024字 ⁄ 字号 评论关闭

 

 1、XML是一种数据格式语言,在很多地方都用到,最常见的有:用到传输数据作为数据的统一格式,作为配置文件等等;
2、因为XML利用标签来标记数据,理论上标签可以是任何形式,但是有时场合需要规定标签的集合,这就是DTD  SCHEMA所描述的;DTD和SCHEMAD都是用于描述规则的。
3、得到XML数据之后,需要得到里面的数据,这就需要到DOM SAX STAX,用来解析XML中的数据的技术;

比如平时所见的网页HTML,其实就是XML的一种特例,专门用于web服务器和浏览器之间通信的数据,如下图,横线就是DTD文件,描述了全部HTML的标签SCHEMA

1.  xml是什么?

XML(extensible markup language,可扩展标记语言),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

2.  XML用来干什么?说说你了解的xml技术及其应用?

用来传输和存储数据。

1.xml分离数据,数据单独放在xml,集中精力更好的完成html的数据显示和布局,方便维护.

         2.xml可以作为商业系统之间交换金融信息所使用的语言.

         3.交换数据,xml可以减少交换数据的复杂性.

         4.xml可以用来共享数据.因为xml无关于硬件和软件.

         5.xml可以充分的利用数据.

         6.可以用于创建新语言,xmlWML语言的母亲,WML无线标记语言,用于标识运行于手持设备上的internet程序.

3.  xmlhtml的区别?

XML与HTML的比较

比较内容

HTML

XML

可扩展性

不允许用户定义自己的扩展标签

允许用户定义自己的扩展标签

结构描述

不支持深层次的嵌套表达

支持深层次的嵌套表达,适合表示结构复杂的文档数据

可读性及可维护性

难以阅读、维护

结构清晰,便于阅读、维护

数据和显示的关系

内容描述和表现形式合为一体

内容描述和表现形式相分离

 1.设计上的区别,xml用来存储数据,重在数据本身,HTML用来定义数据,重在数据的显示模式.

         2.xml可扩展性强,因为他本身就是可扩展性标记语言,可创建个性化的标记语言,提供更多数据操作

          3.xml语法比HTML严格.

a.起始标签和结束标签要匹配,

b.嵌套标签不能互相嵌套.

c.区分大小写.

d.xml属性值必须放在引号中,html可有可无.

e.xml必须有相应的值,html可以有不带值的属性名.

4、xml有哪些解析技术?区别是什么

DOM,SAX,STAX等 

DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问

STAX:Streaming APIfor XML (StAX) 

(1)文件对象模型(Document Object Model,简称DOM):

DOM的优势主要表现在:易用性强,使用DOM时,将把所有的XML文档信息都存于内存中,并且遍历简单,支持XPath,增强了易用性。
DOM的缺点主要表现在:效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。另外效率低还表现在大量的消耗时间,因为使用DOM进行解析时,将为文档的每个element、attribute、processing-instrUCtion和comment都创建一个对象,这样在DOM机制中所运用的大量对象的创建和销毁无疑会影响其效率。

(2)SAX:Simple API for XML(简称SAX)是个顺序存取XML的解析器API。SAX提供一个机制从XML文件读取资料。它是除了文档对象模型(DOM)的另外一种流行选择。

SAX解析器在某些方面优于DOM风格解析器。SAX解析器的内存使用量一般远低于DOM解析器使用量。DOM解析器在任何处理开始之前,必须把整棵树放在内存,所以DOM解析器的内存使用量完全根据输入资料的大小。相对来说,SAX解析器的内存内容,是只基于XML档案的最大深度(XML树的最大深度)和单一XML项目上XML属性储存的最大资料。这两个总是比整颗解析树本身还小。

因为SAX事件驱动的本质,处理文件通常会比DOM风格的解析器快。内存存取耗时,所以DOM较大的内存使用也是一个效能议题。

因为SAX的本质,从磁盘串流读取是可行的。无法放入内存的XML文件只可能使用SAX解析器(或另外的串流XML解析器)来处理。

SAX事件驱动的模型对于XML解析很有用,但它确实有某些缺点。

某些种类的XML验证需要存取整份文件。例如,一个DTD IDREF属性需要文件内有项目使用指定字串当成DTD
ID属性。要在SAX解析器内验证,必须追踪每个之前遇过的ID和IDREF属性,检查是否有任何相符。更甚者,一个IDREF找不到对应的ID,使用者只会在整份文件都解析完后才发现,若这种连结对于建立有效输出是重要的,那用在处理整份文件的时间只是浪费。

另外,某些XML处理仅要求存取整份文件。举例来说,XSLTXPath需要能够任何时间存取任何解析过的XML树。当SAX以用来建构此树时,DOM解析器在设计上已经是如此了。

(3)STAX:XML流APIStreaming
API for XML
,缩写StAX)是用于读写XML文档的应用程序接口

  • 基于树的API- 整个文档以树的形式被读入内存,可以被调用程序随机访问。
  • 基于事件的API - 应用注册接收事件,当原XML文档遇到事体时就会产生这些事件。

两者皆有优点,前者(例如DOM)允许对文档进行随机访问,而后者(例如SAX)需要较小的内存开销,并却通常更快。

这两个方法可以认为是正好相反。基于树的API允许无限制的,随机的访问和操纵,而基于事件的API是一次性地遍历源文档。

StAX被设计为这两者的一个折中。在StAX中,程序的切入点是表示XML文档中一个位置的光标。应用程序在需要时向前移动光标,从解析器拉出信息。与基于事件的API(如SAX)将“数据推送”给应用程序不同的是,SAX需要应用程序维持时间间的状态,以保持文档内的位置信息。

5、你在项目中用到了xml技术的哪些方面?谈谈你都在哪些项目中接触到

:用到了数据存贮,信息配置两方面。在做数据交换平台时,将不能数据源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML文件中还原相关信息进行处理。在做软件配置时,利用XML可以很方便的进行,软件的各种配置参数都存贮在XML文件中。

6、XML文档定义有几种形式?它们之间有何本质区别?

a: 两种形式 DTD(文档类型定义)

 XML schema

b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的)c:DOM,SAX,STAX


DTD 有四个组成如下:

  • 元素(Elements)
  • 属性(Attribute)
  • 实体(Entities)
  • 注释(Comments)

由于 DTD 限制较多,使用时较不方便,近来已渐被 XML Schema 所取代。


Schema是用于描述和规范XML文档的逻辑结构的一种语言,它最大的作用就是验证XML文件逻辑结构的正确性。


XML Schema是以XML语言为基础的,它用于可替代DTD。
一份XML schema文件描述了XML文档的结构。
XML Schema语言也被称为XML Schema Definition (XSD)(XML Schema定义)。

XML Schema的作用是定义一份XML文档的合法组件群,就像DTD的作用一样,一份XML Schema:
定义了可以出现在文档里的元素 ;
定义了可以出现在文档里的属性 ;
定义了哪些元素是子元素 ;
定义了子元素的顺序 ;
定义了子元素的数量 ;
定义了一个元素应是否能包含文本,或应该是空的 ;
定义了元素和属性的数据类型 ;
定义了元素和属性的默认值和固定值 ;


7.找出语法错误并改正:

1)、

<?xml version="1.0" encoding="GBK"?>

<root>

<ywdm>JSPJK_FX_JSP</ywdm>

<ywmc>初始发行</ywmc>

<params>

      <!--String 长度151720 -->

  <param name="nsrsbh">11010180010177999</param>

      <!--String 长度80字符 -->

      <param name="qymc">15位测试用户</param>

   <param name="lock">N</param>

      <param name="pzsq">

   <paramdata name="pzsqdm">008</paramdata>

           <!--String 长度10字符 范围:099999999.99 -->

   <paramdata name="dzkpje">3333.1</paramdata>

           <!--String 长度10字符范围:099999999.99 -->

           <paramdata name="yljkpje">55555.2</paramdata>

           <!--String 长度10字符 范围:099999999.99 -->

   <paramdata name="yljtpje">66666.3</paramdata>

           <paramdata name="szsmsl">

             <szsmsl sl = "0.030">010101</szsmsl>

             <szsmsl sl = "0.040">010102</szsmsl>

          </paramdata>

     </Param>  应该为:</param>

 <param name="pzsq">

   <paramdata name="pzsqdm">036</paramdata>

           <!--String 长度10字符 范围:099999999.99 -->

   <paramdata name="dzkpje">7777.11</paramdata>

           <!--String 长度10字符范围:099999999.99 -->

           <paramdata name="yljkpje">88888.22</paramdata>

           <!--String 长度10字符 范围:099999999.99 -->

   <paramdata name="yljtpje">99999.33</paramdata>

           <paramdata name="szsmsl">

             <szsmsl sl = "0.050" >010103</szsmsl>

             <szsmsl sl = "0.060" >010104</szsmsl>

          </paramdata>

     </param>

         <param name="hysqsl">2</param>

         <param name="hysq">行业授权

            <!--6位编码,例如:010101-->

            <paramdata name="hysqbm">010101</paramdata>

            <paramdata name="hysqmc">行业授权1</paramdata>

            <paramdata name="hysqbm">010102</paramdata>

            <paramdata name="hysqmc">行业授权2</paramdata>

         </param>

 <param name="ssq">20121030</param>

</params>

</root>

2<?xml version="1.0" encoding="GBK"?>

<root>

<  ywdm>JSPJK_GY_BSPH</ywdm>

应该为:<ywdm>JSPJK_GY_BSPH</ywdm>

<ywmc>读报税盘号</ywmc>

</root>

3

<?xml version="1.0" encoding="UTF-8"?>

<root>

<ywdm>JSPJK_GY_JSP_TIME</ywmc>

<ywdm>公用,读金税盘当前时间</ywmc>

应该为:

<ywdm>JSPJK_GY_JSP_TIME</ywdm>

<ywmc>公用,读金税盘当前时间</ywmc>

</root>

8.以下是小规模发票发售的接口使用的XML

<?xml version="1.0" encoding="GBK"?><root>

<ywdm>JSPJK_GP</ywdm><ywmc>发票发售</ywmc>

<params>

<param name="nsrsbh">11010180010177999</param>

<param name="jsph">8710011480</param><!--本次购票的金税盘号-->

<param xh="1">

<fpdm>111011238806</fpdm>

<fphm>00030001</fphm>

<sl>1000</sl>

<fpzl>008</fpzl>

</param>

<param xh="2">

<fpdm>111011158806</fpdm>

<fphm>00003001</fphm>

<sl>1000</sl>

<fpzl>032</fpzl>

</param>

<param name="kpxe">9</param>

<param name="fssj">20120612121212</param>

</params>

</root>

若想购买4卷发票(发票种类不限),请在上面的xml中进行添加。

<?xml version="1.0" encoding="GBK"?><root>

<ywdm>JSPJK_GP</ywdm><ywmc>发票发售</ywmc>

<params>

<param name="nsrsbh">11010180010177999</param>

<param name="jsph">8710011480</param><!--本次购票的金税盘号-->

<param xh="1">

<fpdm>111011238806</fpdm>

<fphm>00030001</fphm>

<sl>1000</sl>

<fpzl>008</fpzl>

</param>

<param xh="2">

<fpdm>111011158806</fpdm>

<fphm>00003001</fphm>

<sl>1000</sl>

<fpzl>032</fpzl>

</param>

<param name="kpxe">9</param>

<param name="fssj">20120612121212</param>

</params>

<param xh="2">

<fpdm>111011158806</fpdm>

<fphm>00003001</fphm>

<sl>1000</sl>

<fpzl>032</fpzl>

</param>

<param name="kpxe">9</param>

<param name="fssj">20120612121212</param>

</params>

<param xh="2">

<fpdm>111011158806</fpdm>

<fphm>00004001</fphm>

<sl>1000</sl>

<fpzl>032</fpzl>

</param>

<param xh="3">

<fpdm>111011228806</fpdm>

<fphm>01000001</fphm>

<sl>1000</sl>

<fpzl>033</fpzl>

</param>

<param xh="4">

<fpdm>111011228806</fpdm>

<fphm>00000001</fphm>

<sl>1000</sl>

<fpzl>036</fpzl>

</param>

<param name="kpxe">9</param>

<param name="fssj">20120612121212</param>

</params>

</root>

extensible markup language

抱歉!评论已关闭.