XML的一点复习和理解
来源:互联网 发布:软件使用许可费 编辑:程序博客网 时间:2024/05/17 01:38
XML的描述
- 可扩展的标记语言,主要用于传输数据。(html是超文本标记语言,即可以包括图片,video等资源,主要用于显示数据)。
- 版本有XML1.0和XML1.1(不向下兼容),主要还是用XML1.0.
- 作用:可以用于配置文件和可以在系统与系统之间传输数据。
- 里面的所有空格换行都会被当做内容原样读出。
简单语法
- 文档声明
<?xml version="1.0" encoding="utf-8" standalone="yes|no"?>`
version版本是必须的,encoding是编码的方式,standalone文件是否独立,即是否需要引入外部的文件,yes是独立的不需要引入外部的文件,no不是独立的,需要引入外部的文件。 文件的乱码说明:保存文件的编码方式是由你选择的编码方式确定,浏览器打开文件的编码方式由encoding的值确定,如果两者不一 ,就会出现乱码,解决的办法就是让保存和打开的编码方式一致。
- 元素
- 有开始标签和结束标签,
- 闭合标签,不能嵌套,有且仅有一个根节。
- 元素都是自定义的,即不能以数字和-打开,区分大小写,不能出现空格和冒号,不能以XML,xml,Xml等开头。
<root><user>cfq</user><password>123456</password></root>
- 属性
都是自定义属性,一个元素上不能有相同的属性,必须用单引号或者双引号引起来(html都就没有这么严格,不引也没有错)。
<root> <user "hobby"="running" "email"="123456@qq.com">cfq</user> <password "length"="6">123456</password> </root>
- CDATA区
特殊字符,把标签中的内容当作字符串。
产生的原因: 在xml中有些特殊的字符必须专一才能读出来,如果这样的特殊字符太多了,一个一个转义实在是不方便,但是如果使用CDATA这可以直接将整体当作字符串处理。
特殊字符:
1.< < ; 2. > > ; 3.& & ; 4.” " ; 5.’ &apos ;
2<书><![CDATA[
里面的if语句就会被当作字符串,不用再依次对里面的特殊字符进行转义。
if(1<6){> <};
]]></书> - XML约束
xml太强大,必须用约束来限制它,有效的xml:有约束的xml文件 。格式良好的xml:遵循语法规范的。
1.DTD(Document type defined),文档类型声明
- dtd与xml文件的关联方式
1.在xml文件中直接引入外部的dtd文件(文件名.dtd), <!DOCTYPE 根节点 SYSTEM "DTD文件的地址">
2.xml文件内部直接书写dtd文件 <!DOCTYPE 根节点[dtd代码]>
3.xml文件中引入网络上的dtd文件 <!DOCTYPE 根节点 PUBLIC "dtd文件的名称" "dtd文件的地址">
- 实体的定义
<! ENTITY 属性(值) "值"><!ENTITY username "张三"> 主要用在文本中,在文本中的引用使用&属性;来使用其值: <作者>&username;</作者>
- DTD的入门
元素的定义:
<!ELEMENT 元素名称 元素类型>
元素名称 :及定义的元素名称;
元素类型:
- (#PCDATA)字符串
<user>cfq</user>
- EMPTY 空,元素的值为空,`
- ANY 任意值
<user></user> <pass>123</pass>
- (子元素)
子元素之间的关系有:(子元素1,子元素2,子元素3),子元素的出现必须是按着1,2,3的顺序出现,有顺序。(子元素1|子元素2),子元素中子元素1和子元素2两者只能出现其中的一个.子元素出现的个数(子元素+,子元素*,子元素?),+表示出现的次数 >=1,?表示<=1; * 表示>=0;
`
属性的定义
<!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
属性类型
- CDATA :字符串
- 枚举:没有提供关键字 例如 左|右 出现列举出来的值
- ID 代表唯一的值
属性约束:- #REQUIRED 属性必须输出
- #IMPLIED 可选的,可以出现,也可以不出现。
- #FIXED 规定值 FIXED “张三”
XML 不能被浏览器解析,HTML可以被浏览器直接解析
xml的解析有很多方式,常用的方式有两种:DOM和SAX。
- DOM方式的解析,会在内存中形成相应的DOM树,方便做增删改查,但会导致文件过大,容易产生内存溢出的现象。
- SAX是基于事件驱动的方式,边解析边读取,不会产生内存溢出的操作,但不能实现增删改查操作。
公司产生的解析包(包里面包含了对XML的两种解析方式):
JAXP:sun公司生产的,dom和sax方式,没有多大的改进,增删改查只能用dom方式,
DOM4J是整合了两者的优点,推荐使用,
java 解析XML文件
一、JAXP(java api for xml processing)方式的
- 获取解析器工厂类DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
- 获取解析器对象DocumentBuilder builder=factory.newDocumentBuilder();
- 获取xml文档,返回document对象Document document=builder.parse("src/book2.xml");
“src/book2.xml”我们要解析的xml文档位置
- 进行相应的dom操作,改变的是内存中的DOM树
- 如果要改变原文档的内容,必须回写,
- 获取回写类的工厂类TransformerFactory transformerFactory=TransformerFactory.newInstance();
7.获取回写的对象Transformer transformer=transformerFactory.newTransformer();
8调用回写对象的方法进行回写 transformer.transform(new DOMSource(document), new StreamResult("src/book2.xml"));
document我们操作过的内存dom.”src/book2.xml”要回写到的文件
Javascript
IE中
IE是第一个原生支持XML的浏览器,为了便于处理,微软创建了MSXML库,方便操作xml
- IE创建document文档
function createXMLObject(){ var version=[ 'MSXML2.DOMDocument6.0',/*不同的库版本*/ 'MSXML2.DOMDocument3.0', 'MSXML2.DOMDocument' ]; for(var i=0;i<version.length;i++){ try{ var xmlDom=new ActiveXObject(version[i]);//创建一个xml文档 return xmlDom; }catch(e){ } } throw new Error("你的系统不支持XML");}
创建的文档是一个空文档,我们必须向其中添加内容,
var xmlDom=createXMLObject();//是一个documentXML,可以对其进行相应的操作
xmlDom.loadXML(“添加的字符串标签”);xmlDom.loadXML("<root>\n<user>LEEE</user>\n</root>");
如果解析过程出现了错误,可以在parseError属性中找到错误。
if(xmlDom.parseError!=0){ //有错误发生 alert("发生错误的行数"+xmlDom.parseError.line+"多错误文本的解释"xmlDom.parseError.reason);}
xmlDom.xml序列化属性,其中保存着表示该节点的xml字符串.
IE中的加载外部xml的方式,可以使用xmlDom.load(“加载的xml文件的url”);
- 同步方式加载:xmlDom.async=”fasle”;,文件下载方式过长,会导致反应很慢,
- 异步加载方式:xmlDom.async=”true”;默认是异步方式,会导致还没有加载完全就执行下面的代码,使出现空,所以出现了下面的判断。
//必须卸载加载文件之前,准备的处理函数,在onreadystatechange中的所有对象都不能使用this来指代,因为这个函数比较特殊,里面的this都指向window,而不是执行的Object xmlDom.onreadystatechange=function(){ if(xmlDom.readyState==1){ alert("正在加载xml文件"); }else if(xmlDom.readyState==2){ alert("加载xml文件完成"); }else if(xmlDom.readyState==3){ alert("加载xml文件完成,部分可以使用"); }else{ alert("加载xml文件完成,全部可以使用"); } }
w3c中
DOM2级 不支持loadXML()方法,无法简易的字符串创建文档,有load()方法可以载入同一个服务器的,没有xml属性的序列化方法.onload()事件相当于IE中的就绪状态事件,由于w3c中的load()方法只支持Firefox和最新的Opera版本,因此就无法实现兼容,
- 创建文档
var xmlDom=document.implementation.createDocument(' ','root',null);//没有默认的命名空间和文档类型
第一个’ ‘表示的是命名空间,在js中命名空间很难管理,比价少使用,null表示的是文档声明,root表示的是创建的根节点.
- 添加内容,模仿loadXML()
可以直接在得到的文档里面进行相应的dom操作来添加元素,比较麻烦。没有loadXML()方法,可以方便直接创建元素。因此引入了DOMParser来模拟loadaXML()方法,方便来解析xml
var xmlParser=new DOMParser();//只能解析格式良好的xmlvar xmlStr="<root><user>LFC</user></root>";//要解析成xml的字符串var xmlDom=xmlParser.parseFromString(xmlStr,'text/xml');//返回的是一个Document的实例,如果解析错误也会放回一个document对象,这个对象的文档元素是<parsererror>,而文档内容是对解析错误的描述
- 序列化,模仿xml
var serializer=new XMLSerializer();var xml=serializer.serializeToString(xmlDom);//xmlDom是我们要序列化的xml文档,可以序列化任何有效的dom对象,包括html文档,将被当作xml文档序列化.
- XML的一点复习和理解
- @SelectProvider,@Select和xml用法的一点理解
- 对AndroidManifest.xml的一点理解
- Javascript 的一点复习
- Linux的一点复习
- wait 和 notify的一点理解
- 滤波器的一点理解和困惑
- 栈和托管堆的一点理解
- 对ANSI和Unicode的一点理解
- BOW和LSH的一点理解
- startActivityForResult和setResult 的一点理解
- 对#define和inline的一点理解
- KVC 和 KVO 的一点理解
- 关于特性和类的一点理解
- 递归的一点理解和举例
- BOW和LSH的一点理解
- 关于RunLoop和Timer的一点理解
- 关于进程和线程的一点理解
- sdut3257(质因数分解平方和)
- 函数调用规则
- 图解何为CNN
- e的前2000位
- UVALive
- XML的一点复习和理解
- 用 Tensorflow 建立 CNN
- Autoware-wayPoint_follower解析
- 图解RNN
- mingw编译Qtcreator
- java分批处理list
- 剑指offer C语言实现
- CS224d-Day 5: RNN快速入门
- hdu1166 敌兵布阵——(线段树模板)