搜索

XML简明教程(4)

Feb 18, 2017 pm 03:30 PM

目录


发展历史

XML和HTML对比之可扩展

XML和HTML对比之语法细节

XML验证之DTD

XML语法结构

XML命名空间

DOM4J读写配置文件

关于SLT

XML验证之DTD



如前面教程中所说的那样,XML的最大作用在于存储、传输以及交换数据。在这期间XML的正确性至关重要,为了保证XML的正确性人们采取了相应的措施。

XML的正确性分为两方面:一方面是XML的语法,一方面是XML的内容。人们把拥有正确语法的 XML 被称为“形式良好”的 XML,对于一个形式良好的XML文档,我们只能保证这个文档的格式符合XML规范,换句话说就是保证XML在语法上没有错误,但是元素与元素的关系,属性的取值是否正确,这些都无法得知。对于一个形式良好的文档,如果仅仅是在有限的应用中使用,例如自己开发的系统中当作配置文件,或者作为数据的存储传输,也许能够很好的满足我们的应用。但如果要让其他用户理解或者系统也能运用你的XML文档,或者进行数据交换,那么必须保证XML为“合法”的。这样就有必要提供一种验证XML机制,目的就是用来保证我们所写的XML文档和别人所写的XML文档其结构是相同的,元素与元素之间的关系是正确的,属性的取值是符合要求的。

这种机制在XML标准中已经为我们提供了,也就是我们前面提到的DTD(Document Type Definition,文档类型定义)。换句话说通过 DTD 可以验证的自己的XML 是否为“合法”的 XML。

我们可以直接在XML文档中定义DTD,也可以通过URI引入外部的DTD文件。内部的DTD虽然方便,但是会导致文档本身长度增加传输负担,而且如果多个XML文档要共用一个DTD我们就需要在每一个文档中加入DTD,这是相当繁琐的。所以推荐的做法是将DTD放到一个单独的文件中去定义,在XML文档中通过URI去引用外部的DTD文件。

下面就演示如何用DTD文件来验证XML文件的合法性

test.xml文件代码

<?xml version="1.0" encoding="gb2312" standalone="no"?>
<!DOCTYPE student SYSTEM "test.dtd">
<!--这是XML文档-->
<student>
	<name>张三</name>
	<age>24</age>
</student>



代码解析:在第二行中将外部的DTD文档引入,用于判断XML是否合法。其中用的路径为相对路径,网上很多XML中引入的DTD是一个URI,无论是相对还是绝对的路径,总之只要XML能找到其对应的DTD就是可行的。

test.dtd文件代码

<!ELEMENT student (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST student sex (man | woman) &#39;man&#39;>



代码解析:第一行至第三行定义了XML文件中的元素,以及元素之间的关系。在第四行定义了student属性中对sex的限制内容,其默认为man而且只能选取两个值man或者woman。

下面开始验证XML的合法性:



package ValidateXml;

import java.io.FileNotFoundException;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class ValidateXMLDTD {
    
    public static void main(String[] args) {
//       test1XML();
       test2XML();
    }
    
    public static void test1XML() {
        try {
        	InputSource ips=new InputSource();
        	ips.setSystemId("d:\\test.xml");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setValidating(true);
            DocumentBuilder db = dbf.newDocumentBuilder();
            db.parse(ips);
        System.out.println("xml 正确!");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static void test2XML() {
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            dbf.setValidating(true);
            DocumentBuilder db = dbf.newDocumentBuilder();
            db.parse(new java.io.FileInputStream("d:\\test.xml"));
        System.out.println("xml 正确!");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}



代码解析:上面的代码验证XML是否为合法,需要注意的是不要直接将XML读入到输入流中,那样的话会找不到相对路径下的DTD,调用test2XML会报错如下,如果调用test1XML则会正确验证XML。

直接用输入流读入的话XML寻找相对路径会在eclipse的环境下进行寻找DTD,如果用setSystemId进行设置的话会根据XML自己存在的目录中寻找DTD(参看具体解释),很显然后一种方式才是我们想要的。

通过DTD我们可以很容易的判断要验证的XML是否符合我们所定义的规范(元素之间的关系,属性的取值是否正确)但是如果要验证元素的内容DTD就无能为力了,于是人们研究了新的验证方法——Schema。就像人们远行一样,当对时间要求不苛刻的时候,火车便宜而且安全;当对时间有严格要求的时候,飞机也是不错的选择。根据实际需要改进技术,根据实际需要选择技术。量体裁衣,明智之举。

 以上就是XML简明教程(4) 的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
XML中的RSS:解码标签,属性和结构XML中的RSS:解码标签,属性和结构Apr 24, 2025 am 12:09 AM

RSS是一种基于XML的格式,用于发布和订阅内容。RSS文件的XML结构包括根元素、元素和多个元素,每个代表一个内容条目。通过XML解析器读取和解析RSS文件,用户可以订阅并获取最新内容。

XML在RSS中的优势:技术深度潜水XML在RSS中的优势:技术深度潜水Apr 23, 2025 am 12:02 AM

XML在RSS中具有结构化数据、可扩展性、跨平台兼容性和解析验证的优势。1)结构化数据确保内容的一致性和可靠性;2)可扩展性允许添加自定义标签以适应内容需求;3)跨平台兼容性使其在不同设备上无缝工作;4)解析和验证工具确保Feed的质量和完整性。

XML中的RSS:揭示内容联合的核心XML中的RSS:揭示内容联合的核心Apr 22, 2025 am 12:08 AM

RSS在XML中的实现方式是通过结构化的XML格式来组织内容。1)RSS使用XML作为数据交换格式,包含频道信息和项目列表等元素。2)生成RSS文件需按规范组织内容,发布到服务器供订阅。3)RSS文件可通过阅读器或插件订阅,实现内容自动更新。

超越基础:高级RSS文档功能超越基础:高级RSS文档功能Apr 21, 2025 am 12:03 AM

RSS的高级功能包括内容命名空间、扩展模块和条件订阅。1)内容命名空间扩展RSS功能,2)扩展模块如DublinCore或iTunes添加元数据,3)条件订阅根据特定条件筛选条目。这些功能通过添加XML元素和属性实现,提升信息获取效率。

XML主链:RSS提要如何结构XML主链:RSS提要如何结构Apr 20, 2025 am 12:02 AM

rssfeedsusexmltoStructureContentUpdates.1)xmlProvidesHierarchicalStructurefordata.2)theelementDefinestHefEed'sIdentityAndContainsElements.3)ElementsRementsRementsRepresSentividividividualContentpieces.4)rsssissisexisextensible,允许custemements.5)5)

RSS和XML:了解Web内容的动态二重奏RSS和XML:了解Web内容的动态二重奏Apr 19, 2025 am 12:03 AM

RSS和XML是用于网络内容管理的工具。RSS用于发布和订阅内容,XML用于存储和传输数据。它们的工作原理包括内容发布、订阅和更新推送。使用示例包括RSS发布博客文章和XML存储书籍信息。

RSS文档:Web联合组织的基础RSS文档:Web联合组织的基础Apr 18, 2025 am 12:04 AM

RSS文档是基于XML的结构化文件,用于发布和订阅频繁更新的内容。它的主要作用包括:1)自动化内容更新,2)内容聚合,3)提高浏览效率。通过RSSfeed,用户可以订阅并及时获取来自不同来源的最新信息。

解码RSS:内容提要的XML结构解码RSS:内容提要的XML结构Apr 17, 2025 am 12:09 AM

RSS的XML结构包括:1.XML声明和RSS版本,2.频道(Channel),3.条目(Item)。这些部分构成了RSS文件的基础,允许用户通过解析XML数据来获取和处理内容信息。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),