Java操作XML

Java操作XML

  1. XML语法
  • 一个XML文件分为文档声明、元素、属性、注释、CDATA区、特殊字符、处理指令。
  1. 转义字符
  • 对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。
& => &
< => &lt;
> => &gt;
" => &quots;
' => &apos;
  1. CDATA区
  • 在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理。此时,可以把内容放在CDATA区里,XML解析程序原封不动的输出。
<![CDATA[ 内容 ]]>
  1. 处理指令
  • 处理指令用来指挥解析引擎如何解析XML文档的内容。比如在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容。
<?xml-stylesheet type="text/css" href="1.css"?>
  • 处理指令必须以“<?”开头,以“?>”结尾,XML声明语句是最常见的一种处理指令。
  1. SAX解析
  • 在使用 DOM 解析 XML 文档时,需要读取整个 XML 文档,在内存中构架代表整个 DOM 树的Doucment对象,从而再对XML文档进行操作。此种情况下,如果 XML 文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。SAX解析允许在读取文档的时候,就对文档进行处理,而不必等到整个文档装载完才会文档进行操作。

  • SAX采用事件处理的方式解析XML文档,利用SAX解析XML文档,涉及解析器和事件处理器。

解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以使用指定解析器去解析某个XML文档。解析器采用SAX方式解析文档时,只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。

  1. SAX方式解析XML文档
//使用SAXParserFactory创建SAX解析工厂
SAXParserFactory spf = SAXParserFactory.newInstance();
//通过SAX解析工厂得到解析器对象
SAXParser sp = spf.newSAXParser();
//通过解析器对象得到XML读取器
XMLReader xmlReader = sp.getXMLReader();
//设置读取器的事件处理器
xmlReader.setContentHandler(new BookParserHandler());
//解析xml文档
xmlReader.parse("book.xml");
  • 实现ContentHandler接口,实现startElement、characters、endElement方法。

  • 输出指定标签值。

class TagHander extends DefaultHandler{
    private String tagName;
    private int choice = 2;      //要读取第几本书的版本号
    private int currenctVersion; //当前读取到第几本书

    @Override
    public void startElement(String uri, String localName, String name,
        Attributes attributes) throws SAXException {
        tagName = name;
        if (name.equals("version")) {
        currenctVersion++;
        }
    }

    @Override
    public void characters(char[] ch, int start, int length)
        throws SAXException {
        if ("version".equals(tagName) && currenctVersion == choice) {
        System.out.println(new String(ch,start,length));
    }
        
    @Override
    public void endElement(String uri, String localName, String name)
        throws SAXException {
        tagName = null;
        }
    }
}
  1. XML约束
  • 在XML技术里,可以编写一个文档来约束一个XML文档的书写规范称为XML约束。
  • 常用约束技术有XML DTD、XML Schema。
  1. DTD
  • Document Type Definition,使用UTF-8或Unicode。在DTD文档中使用ELEMENT声明一个XML元素。<!ELEMENT 元素名称 元素类型>,元素类型可以是元素内容或类型。DTD规范定义了几种类型如EMPTY用于定义空元素,ANY表示元素内容为任意类型。
<!-- book.dtd -->
<!ELEMENT 书架 (书+)>
<!ELEMENT  (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>

<!-- book.xml -->
<?xml version="1.0"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
	<>
        <书名>一千零一夜</书名>
        <作者>佚名</作者>
        <售价>未知</售价>
    </>    
</书架>
  • 元素内容可以使用如下方式描述内容的组成关系
<!-- 用逗号分隔,表示内容的出现顺序必须与声明时一致 -->
<!ELEMENT MYFILE(TITLE,AUTHOR,EMAIL)>
<!-- 用|分隔,表示任选其一 -->
<!ELEMENT MYFILE(TITLE|AUTHOR|EMAIL)>
  • 在元素内容中可以使用+、*、?等符号表示元素出现的次数,+表示一次或多次,?表示0次或一次,*表示0次或多次,(元素)必须出现一次。使用圆括号批量设置。
  1. 属性定义
  • xml文档中的标签属性需要通过ATTLIST为其设置属性。
<!ATTLIST 元素名
	属性名1 属性值类型 设置说明
	属性名2 属性值类型 设置说明
	......>
<!ATTLIST 商品
	类别 CDATA #REQUIRED
	颜色 CDATA #IMPLIED
>

<商品 类别="服装" 颜色="黄色"></商品>
  • 常用属性值类型有CDATA普通文本字符串,ENUMERATED,ID,ENTITY实体。
  1. Schema约束
  • XML Schema对名称空间的支持非常好,比DTD支持更多的数据类型。一个Schema文档称为模式文档,遵循这个文档书写的xml文件称为实例文档。

  • 在XML Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间用一个唯一的URI(Uniform Resource Identifier,统一资源标识符)表示。 在Xml文件中书写标签时,可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束文档。为了在一个XML文档中声明它所遵循的Schema文件的具体位置,通常需要在Xml文档中的根结点中使用schemaLocation属性来指定。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐江小鱼

知识创造财富,余额还是小数

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值