Java中解析、查询、修改xml格式数据

By | 2016年3月29日 | 阅读:318 次

Java中DOM解析、查询、修改xml格式数据

P1. XML教程

P2. DOM解析XML文档

P3. DOM查询XML文档

P4. DOM修改XML文档

xml

1. xml概述

  • xml全称为可扩展性标记语言(Extensible Markup Language),数据格式与显示数据的HTML类似,但XML主要用于结构化、存储和传输数据
  • xml标签意义为用户自定义,与HTML中被预定义的标签不同
  • xml与HTML均为纯文本,但HTML一般由浏览器处理后显示,xml一般由发送与接收双方按约定格式发送与解析,js,PHP,Java都有相应API发送和解析xml文档

2. xml树结构与语法

  • xml整体结构由根节点展开到枝叶

<?xml version="1.0" encoding="utf-8"?>
<root>
<child>childNode</child>
<subchild>subchildNode</subchild>
<body>infomation in here</body>
</root>

  • xml中必须含root根节点,由父节点,兄弟节点,子节点(与二叉树中含义相同)描述节点间关系

3. XML与HTML语法差别

  • HTML:对大小写不敏感(标签固定) XML:大小写敏感(为了区分用户自定义的标签)
  • HTML:元素标签若能从上下文分清标签结束位置,就可不指定关闭标签
     XML: 除xml声明文档头(处理指令)外,其它标签必须指定关闭标签或自关闭
  • HTML:标签属性值如 width=30 合法,属性值可以无双引号” “指定,且属性可以无值
     XML:标签属性值必须加双引号如 width=”30” 才正确,且XML中属性必须指定值
  • HTML:多个连续的空格字符会只合并为1个空格
     XML:文档中的空格全部保留

  • XML中有5个特殊字符需用实体引用代替
    • &lt; 代替 <(小于符:less than) XML解释器会认为 < 是新标签开始
    • &gt; 代替 >(大于符:greater than)
    • &amp; 代替&(与符:ampersand)
    • &apos; 代替 '(单引号符:apostrophe)
    • &quot; 代替 "(引用符:quote)

4. XML标签名命名规则

  • 可含字母、数字以及其他的字符
  • 不能以数字或者标点符号开头
  • 不能以字符 “xml”(或者 XML、Xml)开始
  • 标签名不能包含空格
    命名建议:名称须有意义,各单词间用下划线 ‘_’ 分隔,如<the_root_of_DOM_tree/>

5. XML文档结构中元素与属性

  • 标签相比属性
    • 可包含多重值(多个子元素)
    • 可清晰描述XML树结构,有利于DOM解析
    • 易添加修改子元素,扩展性高
  • 标准:数据本身应当存储为元素,属性只应作为修改值的解释(如单位pt,标签id),通常不指定值
  • XML中应尽量避免属性和混合式内容(标签混属性),尽量使用子标签代替属性,否则XML解析会更复杂

DOM解析XML数据

1. DOM简介

  • XML DOM(Document Object Model,文档对象模型)定义了访问和操作XML文档的标准方法,现被W3C标准化,在包org.w3c.dom中定义了操作DOM的标准方法和接口
  • DOM 解析器解析XML文档,得到一个树结构,包含文档所有的元素。 DOM提供了多种可用于检查文档的内容和结构的API
  • DOM解析器适用于短文档(生成树结构占用较小内存),以下情况应被使用
    • 需要知道文档的树结构
    • 文件中的信息多次使用(数据取出可存放)

2. DOM解析XML流程

   1. 导入org.w3c.dom和javax.xml.parsers
   2. 创建DocumentBuilder

   3. 从流或文件读入并确认文件具有正确格式(.xml,.txt等),并解析创建Document对象,Document对象是XML文档的树形结构在内存中的表现

   4. 获取root根元素

   5. 检查子元素和属性,处理数据

注明:由于子元素之间的空白字符会被XML解析器误认为也是子元素,若只想得到子元素,可按两种方式判断

3. 解析示例

  • xml文件
    <?xml version="1.0"?>
    <class>
    <student num="14050110067">
    <name>wuYin</name>
    <subject>math</subject>
    <marks>85</marks>
    </student>
    <student num="14050110054">
    <name>yangYu</name>
    <subject> Virtue Course</subject>
    <marks>95</marks>
    </student>
    <student num="14050110083">
    <name>zhuYuFan</name>
    <subject>CET4</subject>
    <marks>550</marks>
    </student>
    </class>

  • 解析代码

}

[/crayon]

  • 输出
    num: 14050110067
    name: wuYin
    subject : math
    marks : 85
    num: 14050110054
    name: yangYu
    subject : Virtue Course
    marks : 95
    num: 14050110083
    name: zhuYuFan
    subject : CET4
    marks : 550

查询 修改 待续….

2 thoughts on “Java中解析、查询、修改xml格式数据

  1. Boadicea

    别用MarkdownPad2在写成笔记再粘贴进来,直接用WPME写,在本页分页预览,加油喔

Comments are closed.