加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML

发布时间:2020-12-16 00:11:38 所属栏目:百科 来源:网络整理
导读:XML和HTML其实是源自同一个先辈:SGML XML比属性文件Properties的优势在于,结构层次清晰,不限于单一的平面层次结构(键值对,键还是唯一的)。 XML文档结构: 文档头: ?xml version="1.0"? 或者?xml version="1.0" encoding="UTF-8"? 之后通常是文档类型

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 定义

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读