XML解析原理 | QiuRiMangCao

XML解析原理 | QiuRiMangCao

@author QiuRiMangCao | 秋日芒草 
@Description XML基础 | 解析原理 | 解析方法
@time 2017-08-10


xml 解析后乱码问题?

contact.xml 里面写的是字符


编码过程:字符-字节
写完xml-保存-硬盘(字节) 都需要查码表windows - GBK

解码过程:字节-字符
contact.xml(硬盘) - 浏览器 - 字符 也要查码表 默认为utf-8

涉及xml文件的编码问题:
1.保存xml文件的时候(编码过程) 可以在保存文件的时候选择保存时的编码为utf-8
2.打开/解析xml文件的时候(解码问题) 可以对xml文档声明
//<?xml version="1.0" encoding="utf-8" ?>
//解码时用的码表

如果要保证读取的xml文件不存在中文乱码问题:
1.保证以上二个地方的编码一致
2.编码要支持中文

补充:Windows的默认编码为GBK,Linux的默认编码为UTF-8
GBK编码占两个字节,ASCLL编码只占一个字节。
GBK编码肯定是能包含ASCCL里面的所有码表。
这样做可以统一编码。 

在eclipse中编写xml,保存的时候会自动根据文档声明来保存
如:<?xml version="1.0" encoding="utf-8"?>
//保存文件格式为utf-8

项目问题:
某一天程序员001从git上拉了一个phone.xml文件到本地,
需要修改xml,然后提交上去,phone.xml文件如下,
结果第二天系统炸了,请分析是怎么回事?

<?xml version="1.0" encoding="utf-8"?>
<phone>
    <id>1</id>
    <dh>15382290136</dh>
</phone>

分析:程序员把项目拉下来后用工具打开文件进行修改,
如就是使用记事本编辑,编辑后ctrl+s保存,这个时候保存按照默认编码格式(gbk)保持了,
而现在xml中encoding="utf-8",这个时候会导致xml的读取失败或出现乱码问题。
这里在修改的时候需要注意,着重看文档声明的编码格式,按文档声明的编码格式保存。

[转义字符]
在xml中内置了一些特殊字符,这些字符不能直接被浏览器原样输出,
如果希望把这些特殊字符按原样输出到浏览器,那就要对这些特殊字符进行转义。

特殊字符   转义字符
<          &lt;
缺点:转义书写麻烦

[CDATA块]
作用:可以让一些需要进行包含特殊字符进行原样输出
语法:
    <![CDATA[
        //需要转义的字符
    ]]>

[处理命令]
作用:处理指令用来指挥解析引擎如何解析xml文档内容
案例:<?xml-stylesheet type="text/css" href="1.css" ?>
1.css如下:
phone{
    color:red;
}


//告诉xml解析该xml文档引用哪个css文件

需要提取xml内容可以使用xml-stylesheet命令指令

//不严谨-严谨
HTML --- XML


[xml解析] 
xml文件除了给开发者看,更多情况是让程序去读取xml文件中的内容


[解析方式-原理不同]
1.DOM解析 : JAXP JDOM Dom4J(默认)
2.SAX解析 :  Sax解析工具

BOM:浏览器对象编程
DOM:文档对象编程 javaScript引擎把html文本标签封装成各种对象

Xml解析器把解析xml文档时,把xml文件的各个部分内容封装成对象,
通过这些对象操作xml文档,这种做法叫DOM解析(DOM编程)

Document树:
树只有一个根标签,树上的分支,叫节点(Node)
节点信息<phone>  --Node
    节点名称
    节点类型:标签节点,属性节点,文本节点,注释节点

    标签节点:<name></name>  --Element
        标签名称
    属性节点:<phone id="01"> </phone>   --Attribute
        属性名称
        属性值
    文本节点:<name>123456</name>  --Text
        文本内容

xml--->对象--->通过对象去操作xml

Dom解析:
Document对象,代表一个完整的xml文档
通过Document对象就可以得到其下面的其他节点对象,
通过节点访问xml文档的内容(标签,属性,文本,注释)

[什么是DOM解析]
DOM解析原理:xml解析器一次性把整个xml文档加载进内存,
然后在内存中年构造成Document的对象,通过Document对象,
得到树上节点对象,来通过节点对象访问(操作)到xml文档内容。















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值