XML
Posted tonghun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML相关的知识,希望对你有一定的参考价值。
一概述
1.什么是XML?
eXtensible Markup Language,不以预先定义的一组数据结构为前提,用作应用程序间数据交换的载体。XML没有规定固定的标签与固定的结构,用户可以自定义,可扩展性强,这一点不同于html语言,HTML规定了可使用的标签以及标签之间的关系,扩展性差。
2.XML的作用
使用XML语言编写的文档主要用作应用程序间数据交换的载体,一个应用程序将传递给另一个应用程序的数据以XML语言编写,接收一方的应用程序根据XML语言的规则读取。
3.XML文档的构成
⑴序言:XML声明、处理指令与注释。
⑵文档元素
①文档元素一般指文档标签。
②XML文档元素以树形分层结构排列。
③XML文档中只能有一个顶层元素,这个顶层元素叫做根元素。
④文档元素必须有起始标记与结束标记,两种形式:<tagName>xxxxx</tagName与<tagName xxxx/>。
⑶元素属性
元素属性依附于元素,必须通过元素调用,只能出现在起始标签中,其值用单引号或者双引号括起来。
⑷元素注释
注释格式:<!--xxxx-->
4.dom4j
一种流行的读写XML文档的开源组件,导入架包就可使用。
二特殊字符的处理
1.处理原因
一些字符是标签的一部分,当出现在元素内容中时会被XML文档解析器视作标签而不是普通字符,这是就会出错误,为了避免这种情况的出现,使用一些特殊方式来处理这些歧义字符。
2.处理方式
⑴替代法
用其他字符替换歧义字符。
歧义字符 用作替换的字符
< <
> >
& &
‘ &apos
" "
⑵CDATA字段
①一种标记法,在可能出现歧义的字符前放一个标记,当系统接触到标记,就按照预先定义的处理方式把标记中的字符当做普通字符。
②语法格式:<![CDATA[content]]>。
③在XML中使用正则表达式必须使用CDATA字段。
三几个重要类
1. Node(Interface)
|
|
|----------------------------------------------------------------------------|
| | |
Branch(Interface) Comment(Interface) Attribute(Interface)
|
Element(Interface)
2.XMLWriter
用来将创建的XML文档输出到文档中,一个装饰类,装饰了Writer或者OutputStream。
⑴如果装饰了字符流,为了防止输出到文档中的中文出现乱码,编码方式必须设为GBK。
⑵如果装饰了字节流,为了防止输出到文档中的中文出现乱码,编码方式必须可设为UTF-8。
3.SAXReader
XML文档对象创建类,基于硬盘上的文档创建封装了文档全部信息的对象。
四创建XML文档
1.创建XML文档首先应该创建文档对象
Document document=DocumentHelper.createDocument();
2.创建根节点
使用文档对象创建的节点即为根节点:
Element root=document.addElement(name);
3.创建子节点:
Element child=root.addElement(name);
4.向节点中添加内容
⑴element.setText(content):添加普通内容。
⑵element.addCDATA(content):添加CDATA字段。
5.添加或修改属性:
element.addAttibute(String name,String value);
6.添加注释:
element.addComment(commment);
7.设置编码格式:
OutputFormat format=new OutputFormat(); format.setEncoding(xxxx);
8.设置输出格式:
默认情况下,XML文档采用紧凑方式排版,阅读不方便,可以将输出格式改为缩进方式:
OutputFormat format=OutputFormat.creatPrettyPrint();
9.输出XML文档:
⑴未设置输出样式时输出:
File file=new File(path);//创建文件对象 XMLWriter writer=new XMLWriter(file); writer.close();
⑵设置了输出样式时输出:
XMLWriter writer=new XMLWriter(file,format);
⑶输出到页面:
PrintWriter out=response.getWriter(); XMLWriter writer=new XMLWriter(out,format);
⑷输出到控制台:
XMLWriter writer=new XMLWriter(System.out,format);
五解析文档
1.解析文档的第一步是创建文档对象:
File file =new File(path); SAXReader reader=new SAXReader(); reader.read(file);
2.获取根节点:
Element root=document.getRootElement();
3.根据名称获取节点:
⑴root.element(name):获取具有指定名称的节点,如果文档中包含多个,则返回第一个。
⑵root.elements(name):以List集合返回具有指定名称的全部节点。
4.根据路径获取节点:
⑴selectSingleNode(xpath):
①xpath可以采用相对于操作对象的相对路径,不以/开头。
②xpath采用相对于根节点的绝对路径,以/开头。
③如果同一个路径下有多个名称相同的节点,可以添加属性来区分同名节点,此时xpath格式如下:path[@id=‘xx‘]。
5.删除节点:
⑴删除单个节点:
①parentNode.remove(subNode):由父节点删除。
②element.detach():自己删除自己。
⑵删除具有指定名称的全部节点:parentNode.elements(name).clear();
6.修改节点:
element.setName("newName"),修改节点名称。
7.获取属性:
⑴Attribute attr=element.attribute(String name):获取指定名称的属性。
⑵Attribute attr=element.attribute(int index):获取指定索引的属性,index从0开始。
⑶String value=attr.getValue():获取属性值。
8.删除属性:
⑴attr.detach():自己删除自己。
⑵element.remove(attr):通过节点删除属性。
9.获取内容:
⑴节点的内容指的是起始标签之间未被其他标签包含的文本,包含空格,所以才有了去除空格的方法getTextTrim。
⑵element.getText():获取内容,未删除前后可能存在的空格。
⑶element.getTextTrim():获取删除前后空格的内容。
以上是关于XML的主要内容,如果未能解决你的问题,请参考以下文章
从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration