XML

XML和HTML其实是源自同一个先辈:SGML 

XML比属性文件Properties的优势在于,结构层次清晰,不限于单一的平面层次结构(键值对,键还是唯一的)。


XML文档结构:

文档头:

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


之后通常是文档类型定义(Document Type Definition,DTD)例如:(非必需品)

<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">


然后是元素,根元素和子元素,通常希望 文本有 标签包含。

并且XML中的元素可以使用属性,例如:

<font name="Helvetica" size="36" />

但是还有另外的:

<font>

<name>Helvetica</name>

<size>36</size>

</font>

属性的灵活性要差很多,例如要给属性添加一个单位,那么要带入到属性值里面去

<font name="Helvetica" size="36 pt" />

<font>

<name> Helvetica</name>

<size unit="pt">36</size>

</font>

别人的经验之谈,属性只应该用来修改值的解释,而不是用来指定值。所以当纠结于是设置属性,还是对某个值进行解释,我们

所以我们看到的,基本都是以元素的形式出现的……


解析XML文档

要处理XML文档,就要先解析(parse)它。解析器是这样一个程序,它读入一个文件,确认这个文件具有正确的格式,然后将其分解成各种元素,使得程序员能够访问这些元素。Java提供了两种XML解析器:

文档对象模型(Document Object Model,DOM)解析器这样的树形解析器(tree parser),它们在读入的XML文档转换成树结构。

XML简单API(Simple API for XML,SAX)解析器这样的流机制解析器(streaming parser)。它们在读入XML文档时生成相应的事件。


DOM解析器可能更容易一些,但是注意,当以要处理很长的文档的时候,用它生成树结构将会消耗大量内存;

或者如果你只是对于某些元素感兴趣,而不关心它们的上下文,那么在这些情况下你应该考虑使用流机制解析器。


DOM解析器的接口已经被W3C标准化了,(JDK中包含了自己的DOM解析器,DocumentBuilderFactory)

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder  builder = factory.newDocumentBuilder();

当我们读入某个文档时

File f = ……

Document doc = builder.parse(  f  ) {  url、in(输入流都行)  }


然后通过调用 getDocumentElement 方法来启动对文档内容进行分析,返回根元素:

Element root = doc.getDocumentElement();

root.getTagName()返回元素的标签名;

获得子元素,使用getChildNodes()方法:

NodeList children = root.getChildNodes();

……

Node child = children.item(i)

……


有可能空白字符也会解析进去,可以用DTD来剔除,也可以程序剔除。

用到的API:


如果要指定文档结构,可以提供一个文档类型定义(DTD)或一个XML Schema 定义





















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值