——XML文档(一)


什么是xml,为什么要学习xml

 Exensible Markup Language 可扩展标记语言

现实生活中存在大量有关系的数据,怎么把生活中的数据交给计算机Xml就是这样的一种语言。

Xml常见应用

除了能保存有关系的数据之外,他还经常用作软件配置文件,描述模块之间的关系

在一个软件系统中,为了提高系统灵活性,他所启动的模块通常有配置文件决定,比如启动一个软件,他需要启动a,b两个模块,但是启动a模块又需要启动a1,b1两个模块,xml能准确的描述这种关系。

一开始xml是想打击掉html的,但是十年了还打击不掉,xml就转作配置文件领域了

Html也更新成了html5了

 

Xml语法

文档声明

元素

属性

注释

CdaTA区,特殊字符,

处理指令

1文档声明:每个xml文档必须要有文档声明,叫做格式良好的xml文档

<?xml version =”1.0” ?> 最简单的xml文档

2做开发的时候加encoding属性用来说明文档字符编码

<?xml version =”1.0” encodin=”GB2312”  ?>开发时候xml写了中文的话,必须加encoding属性

3“中国”这两个字在保存在硬盘里边之前需要查一个码表GB2312,变成二进制存进硬盘,然后浏览器读硬盘的时候,继续用GB2312码表兑换成相应的数字,但是如果encoding属性是UTF-8了,但是记事本在保存的时候还是会按照系统内部默认的码表GB2312,浏览器在读取的时候却硬盘的二进制换成对应的UTF-8码表的文字,就出错了,这时候怎么办,所以文件在保存的时候用另存为utf-8保存。(解决乱码问题)eclipse软件解决了这个问题,encoding写的什么在保存的时候,这个软件就已经保存成了那个类型的。

4 用standalone属性说明文档是否独立 独立意思就是这个xml文档在工作的时候是否依赖于另一份文档。

<?xml version =”1.0” encodin=”GB2312” standalone=”no” ?> sl属性是no,IE应该打不开的,但是却打开了,说明IE浏览器不关注这个属性。

元素 element(标签)

1Xml元素指的是xml文件出现的标签。

标签分开始和结束标签,一个标签中可以嵌套若干标签,但所有标签必须合理嵌套,绝对不能出现交叉嵌套

2 格式良好的xml文档必须有且仅有一个根标签,其他标签都是这个根标签的子孙标签。

3 对于xml文档中的空格和换行,xml文档都当做标签内容处理。

4命名规范 xml标签可以包含字母数字及一些可见字符,但是

       区分大小写,

       不能数字 _ 开头

不能用xml Xml XML 开头等

不能用空格,名称中间不能含有冒号

属性

1一个标签可以有多个属性,每个属性有自己的名称和取值

<input name =”text”>

2 标签属性锁代表的信息可以被改成子标签的形式来描述

<input>

       <name>text</name>

</input>

注释

<!—注释-->格式,与html一样,xml声明之前是不能有注释的。注释也不能嵌套注释

CDATA区

编写xml文档时候有些内容不详要解析引擎解析,当原始内容处理,这时候就放到CDATD区中,远方不动输出

<![CDATA[ 内容]]

转译字符 

1处理指令(PI)处理指令用来指挥解析引擎如何解析XML文档内容。

2 指令必须用<? 开头,       ?>结尾,文档声明其实就是一个处理指令

<?xml-stylesheet   type =”text/css”  href=”1.css” ?>用sty...指令指挥解析器用css文件效果显示文档内容。

XML约束

在xml技术中可以编写一个文档 ,约束一个xml文档的书写规范,

为什么需要xml约束。因为配置文件中一定要约定xml文档的书写规范,要不然就可以瞎写。

常用的约束技术

XML DTD

XML Schema

 

DTD约束技术 Document Type Definition 全称文档类型定义。

!ELEMENT 是标签的意思,#PCDATA就是可以放字符串的意思。

这是两个文件,一个是xml文档,另一个是book.dtd来约束book.xml

强调一点,如果dtd约束文件中存在中文字符,那么文件在保存的时候必须保存为UTF-8或者Unicode

校验一个xml文档是不是用dtd写的,或者dtd写的对不对,用什么办法呢?

吧两个文件都放在Eclipse中,程序会自动校验

1 DTD约束模式的局限性,对数字的约束力度不够,这也是为什么要学另一种约束模式的原因

2 DTD两种书写模式,也可以放在xml中书写。

Xml编程(CRUD) cread read update delete

往xml文档中增删改查数据的!在实施增删改查之前要吧xml文档中的数据解析到内存中。

Xml两种解析方式dom 和sax

dom 文档对象模型 W3C组织推荐的解析xml的一种方式

       dom解析,上来会把整个xml文档放在内存中变成一个对象,每个元素也会变成一个对象,文本也会变成text对象,属性页会变成对象,

       优缺点:缺点,对内存消耗太大。如果xml文档太大时不会用dom解析的,

                     优点,对文档增删改查很容易,

sax不是官方标准 xml社区事实上的标准,几乎所有xml解析器都支持他

       sax解析,从上往下读,读取一行,解析一行。优点,对内存消耗小,缺点,不适合对文档进行增删改,只适合读取。

面试题,dom和sax解析区别?dom优点,缺点,sax优点缺点

 

 调整jvm大小。

如果你拿到的xml文档很大,几百兆,而且只能用dom解析,这时候就必须调整jvm的大小。很实用开发力

       Jvm没有调的话默认64M(1021*1024*64)的内存.

       -Xmx80   jvm调整为80M,在eclipse中点run as  ——> Open RUN Dalog 打开第二个选项Ar guments,在下一个窗口VM中写入-Xmx80

 

       Xml解析开发包,实际开发中就调用这些包, dpm4j> jdom > jaxp 性能比较

 

Jaxp解析开发包,是j2se的一部分,在javax.parsers包中,定义了几个工厂类,程序员调用这些工厂类,就可以得到xml文档的Dom或者Sax的解析器,从而实现对xml我能当的解析。

       Jaxp解析文档过程

1         创建工厂, DocumengtBuilderFactory 是个抽象类,不能实例化,但是可以用instance来创建对象。

DocumengtBuilderFactory  factory = DocumengtBuilderFactory.newInstance();

2         得到dom解析器       DocumentBuilder()方法返回一个实例对象的解析器

DocumentBuilder builder = facrory.new DocumentBuilder();

3         解析xm文档 ,得到代表文档的document

Document  document  =  builder.parse(“src/book.xml”)//调用parse方法对xml文档解析

4         接下来就可以读取文档中的某些元素了

 

向xml文档中添加节点,<售价>59.00元</售价>

1创建节点     Element  price  = document.createElement( “售价”);

price.setTextcontent(“59.00”);

       2 吧创建的字节挂到第一本书上

                                   Element  book = (Element)document.getElementsByTagName(“书”).item(0);

                                   book.appendChild(price);

       3 吧更新后的内存写回到xml文档

             TransformerFactory   tffactory = TransformerFactory.newInstance();

              Transformer tf = tffactory.newTransformer();

              Tf.transform(new DOMSource(document),new StreamResult(new FileOutputStream(“src/book.xml”)))

 

想xml文档指定位置添加节点

1创建节点

2得到参考节点,  Element   reNode = (Element)document.lementsByTagName(“售价”) .item(0);

3得到要挂崽的节点            Element  book = (Element)document.lementsByTagName(“书”) .item(0);

4 往book节点的指定位置插崽   book.insertBerore(price,reNode);

1 得到要删除的节点

Element e =(Elemen)document.getElementsByTagName(“售价”).item(0);

2得到要删除节点的爸爸

Element book =(Elemen)document.getElementsByTagName(“书”).item(0);

3 用爸爸的方法删除崽

book.removeChild(e);

4更新xml文档。

第二种删除方式

1 得到要删除的节点

Element e =(Elemen)document.getElementsByTagName(“售价”).item(0);

e.getParenNode().removeChild(e);//运用父类方法删除自己

SAX解析

在读取文件的时候,就对文档进行处理,不用等到文档读完

Sax解析xml文档设计到两个部分,解析器和事件处理器

解析器可以勇士jaxp的api创建,创建出sax解析器后,就可以指定解析器去解析某个xml文档

在解析文档时候,只要解析到xml文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会吧当前解析到得xml文件内容作为方法的参数传递给时间处理器。

事件处理器是有程序员编写的。

 

Sax解析xml文档步骤

1创建解析工厂

       SAXParserFactory factory = SAXParserFactory.newInstance()

2得到解析器

       SAXParser  sp =  Factory.newSAXParser();

3得到读取器

        XMLReader reader  = Sp.getXMLReader();

4设置内容处理器

       Reader.setContentHandler(handler);

 

5读取xml文档内容

 

//下面处理器的作用得到xml文档所有内容

class   ListHander  implements  ContentHandler{

 

}


阅读更多
版权声明:转载请附带本文地址 https://blog.csdn.net/liuyifeng1920/article/details/6883099
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭