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.处理方式

⑴替代法

用其他字符替换歧义字符。

                   歧义字符          用作替换的字符

                         <                     &lt;

                         >                     &gt;

                         &                     &amp;

                          ‘                     &apos

                         "                      &quot

 

⑵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

创建片段而不从 java 代码实例化它

如何组合绑定片段而不将它们包装在 XML 文字中

我们可以在活动 xml 中编写 UI 以及在片段 xm 中编写 UI 吗?

VS中添加自定义代码片段——偷懒小技巧