第二十章 XML

本文详细对比了HTML与XML的特点,指出HTML的标记语法不够严谨且厂商众多导致语言不统一,而XML则具有更严格的语法规范,支持自定义标记并广泛应用于网络配置、数据交换和存储等领域。通过解析技术的介绍,如DOM和SAX,展示了如何在Java中高效处理XML文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

html比xml产生的早些,发展也很不错。但是html有着2个缺点,是xml曾经想要替代的。

就是标记语法不是很严格,有时候难以判断,造成长时间的等待。还有就是厂商众多,导致语言不太统一,各有特点。给编程者带来一些麻烦。

xml这些方面来说,一是语法更加严格,要求标记有开始必有结束,除非是单标记。只能有一个根元素。并且必须有正确嵌套。

还有xml可以扩展。允许用户自定义一些自己的标记。但是需要提供解释文档。以便浏览器可以正确的解析。常用的有dtd文档和schema

一、用途

xml现在常用作网络配置文件,在数据交换和结构化存储及显示方面有着很广泛的应用。另外就是配置文件。

二、组成

xml有两部分组成:

1.序言

包括一下几个部分

声明:<?xml    version="1.0"    encoding= "UTF-8"?>

注释:<!--                注释       -->

样式说明::<?xml   sytlesheet="******"    ?>

空白:

描述文档:系统文件<!DOCTYPE   根元素名称   SYSTEM  "dtd文件路径">

网络资源<!DOCTYPE   根元素名称   PUBLIC  "网络dtd文件url">

内置定义<!DOCTYPE   根元素名称   【里面直接定义dtd文件内容】>

2.文档元素

xml文档元素包括  元素和属性

<!ELEMENT  元素名称 (子元素列表)>

子元素后面可以跟这些修饰符:?0或1次,+1或多次,*0或多次。“,”表示元素的顺序。()表示元素分组,|表示选其中一个。

如果元素后面没有嵌套的子元素时,可以用#PCDATA来表示含有文本描述。EMPTY表示元素无任何文本描述。

 

<!ATTLIST   属性名称  

       属性名称      数据类型       约束

                        CDATA字符串               #REQURED 必须选择填写

                        ID唯一不能重复            #IMPLIED 可以选择

                        IDREF 引用其他ID       #Defualtvalue 默认值

                                                                                    >

 

三、解析

解析技术分为2种:

一个是进行校验的处理器;

一个是不进行校验的处理器;

java中常用的2种API 是

DOM :小文件可以反复查询,可以修改和排序,还能与其他程序在内存中共享,因为它是将文件全部加载到内存中进行处理。是文档树的模型,可以显示的处理。

SAX:适用于大型文件的一次性 选择性的扫描。 它是事件触发模型。只有扫描到需求的内容时,才会产生事件,可以忽略不关心的部分。

 

DOM和SAX的实现方法有

JAXP,JDOM,DOM4J3种

DOM4J 简单易用,适合处理小型的文档。使用了java集合框架。

 

列子:

import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


public class MyXML {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SAXReader saxreader = new SAXReader();
		try {
			Document document  = saxreader.read("homework.xml");
			List list = document.selectNodes("//tanks/tank/name");
			for(Object obj:list){
				Element ele = (Element) obj;
				System.out.println(ele.getText());
			}
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if(saxreader != null){
				
			}
		}
		
	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值