`

编程实现DTD规范对XML文件内容正确性的校验

阅读更多

1.User.dtd

<!ELEMENT User (name+,gender,birthday,address,job_time,curr_postion,email,
mobilephone+,curr_salary?,hope_salary,personal_price?)>
<!ATTLIST basic-information title CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT gender EMPTY>
<!ATTLIST gender value (female|male) #REQUIRED>
<!ELEMENT birthday (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ELEMENT job_time (#PCDATA)>
<!ELEMENT curr_postion (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT mobilephone (#PCDATA)>
<!ELEMENT curr_salary (#PCDATA)>
<!ELEMENT hope_salary (#PCDATA)>

<!ELEMENT personal_price (#PCDATA)>
<!ENTITY  personal  "hello Daniel! You are a good Software Engineer!">

 

2.User.xml

 

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE User SYSTEM "User.dtd">
<User>
        <name>Daniel Cheng</name>
           <gender value="male"/>
           <birthday>1985/01/08</birthday>
           <address>北京市朝阳区东三环中路CBD</address>
           <!--这个注释去掉的话,你将会发现DTD校验XML报告错误,因为DTD文件里根本没有定义hobby元素
           <hobby>Swimming,Basketball!</hobby>
           -->
           <job_time>1</job_time>
           <curr_postion>Software Engineer</curr_postion>
          <email>mingdongcheng@163.com</email>
           <mobilephone>15201010100</mobilephone>
           <curr_salary/>
           <hope_salary>10万-30万</hope_salary>
           <personal_price>
           自我评价:
           &personal;
           </personal_price>
</User>

 

 

3.UserXMLValidateDTD.java

 

 

package exercise;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * 用DTD规范校验XML文件内容的正确性
 * @author Daniel Cheng
 *
 */

public class UserXMLValidateDTD {
    private boolean validate = true;

    public UserXMLValidateDTD() {

    }

    public boolean XMLValidateDTD(File file) {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setValidating(true);
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            MyHandler mh = new MyHandler();
            builder.setErrorHandler(mh);
            builder.parse(file);
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return validate;
    }

    class MyHandler extends DefaultHandler {
        String errorMessage = null;

        public void error(SAXParseException e) throws SAXException {
            errorMessage = e.getMessage();
            System.out.println("一般错误!!!" + errorMessage);
            validate = false;
        }

        public void fatalError(SAXParseException e) throws SAXException {
            errorMessage = e.getMessage();
            System.out.println("严重错误!!!" + errorMessage);
            validate = false;
        }

    }

}

 

 4.UserDomParser.java

 

package exercise;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
 * 用DTD检验XML并解析
 * @author Daniel Cheng
 *
 */

public class UserDomParser {

    public static void main(String[] args) throws ParserConfigurationException,
            SAXException, IOException {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        String fileName = "";
        File file = null;
        Scanner sc = new Scanner(System.in);
        while (true) {
            if (fileName.equals("")) {
                System.out.println("请输入xml文件名字:");
                fileName = sc.nextLine();
            }
            file = new File(fileName);
            if (!file.exists()) {
                System.out.println("xml文件不存在!");
                fileName = "";
                continue;
            } else {
                break;
            }
        }
        boolean validate = new UserXMLValidateDTD().XMLValidateDTD(file);

        if (validate) {
            System.out.println("通过DTD校验!");
            Document doc = builder.parse(file);
            Element root = doc.getDocumentElement();
            printElement(root);
        } else {
            System.out.println("该XML文件未通过DTD校验解析终止!!!");
        }
    }

    public static void printElement(Element e) {
        System.out.print("<" + e.getTagName());
        NamedNodeMap map = e.getAttributes();
        for (int i = 0; i < map.getLength(); i++) {
            Attr attr = (Attr) map.item(i);
            System.out.print(" " + attr.getName() + "=\"" + attr.getValue()
                    + "\"");
        }
        System.out.print(">");

        NodeList list = e.getChildNodes();
        for (int i = 0; i < list.getLength(); i++) {
            Node n = list.item(i);
            if (n.getNodeType() == Node.ELEMENT_NODE) {
                Element en = (Element) n;
                printElement(en);
            } else {
                System.out.println(n.getTextContent());
            }

        }
        System.out.print("</" + e.getTagName() + ">");
    }

}

 

分享到:
评论

相关推荐

    使用DTD规范XML文档

    学习XML语言的DTD如何去写,如何更好的写出XML语言的DTD文档,对进一步深入学习XML有很大帮助。

    DTD规范XML文档编写

    DTD规范XML文档编写级XML文档的一般书写格式

    使用DTD验证XML文档

    使用DTD验证XML文档 一、 DTD的定义: a) DTD是Document Type Defintion的缩写,即文档类型定义。DTD用来描述XML文档的结构。...c) DTD使应用程序可以使用一个标准DTD校验从外部接收的XML数据是否有效。

    jdom解析xml、dtd约束xml文件

    这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写以及dtd文件约束xml文件。这是一个jdom解析xml的小例子、里面还有dtd文件的编写...

    实验二-基于DTD实现XML文档的有效性验证.doc

    基于DTD实现XML文档的有效性验证

    xml与DTD,xml与DTD

    xml与DTD,xml与DTD,xml与DTD,xml与DTD

    基于DTD实现XML文档的有效性验证

    (1)通过实验,进一步理解掌握DTD的语法规则,能够编写正确的DTD文档。 (2)通过实验,进一步理解应用DTD对XML文档进行验证的原理...(4)通过实验,学会利用标准DOM接口,编写Java程序实现基于DTD对XML文档的有效性验证。

    将DTD与XML文档相关联之外部DTD

    关于DTD文件的介绍,主要讲外部DTD,将DTD与XML文档相关联之外部DTD

    XML-DTD实例讲解

     DTD实际上可以看作一个或多个XML文件的模板,这些XML文件中的元素、元素的属性、元素的排列方式/顺序、元素能够包含的内容等,都必须符合DTD中的定义。XML文件中的元素,即我们所创建的标记,是根据我们应用的实际...

    DTD和Schema规范XML文档

    [实验目的]: 1、掌握使用XMLSpy软件创建DTD和Schema文档 2、掌握在XML文档如何引入DTD和Schema,并验证有效 3、掌握DTD中声明元素、属性的方法 4、掌握Schema中声明元素,属性,类型的方法

    mybatis源码级课件DTD文件jar包xml文件最全最新

    mybatis源码级课件DTD文件jar包xml文件最全最新,mybatis源码级课件DTD文件jar包xml文件最全最新,mybatis源码级课件DTD文件jar包xml文件最全最新

    DTD验证XML详解

    很好的一个关于DTD验证XML的一些文档,内容丰富。需要了解的速速下载

    《XML》实验(1) -- XML Basics & DTD

    2、熟悉和掌握XML规范的基本内容,包括XML声明、注释、处理指令、元素、属性、CDATA段、预定义实体、命名空间的使用,以及如何进行XML文档良构和有效性验证;能够灵活地使用XML层次数据来表示各种信息。 3、掌握如何...

    第135讲phpxml编程②cdata实体字符处理指令dtd快速入门编程校验xml.pdf

    第135讲phpxml编程②cdata实体字符处理指令dtd快速入门编程校验xml.pdf

    mybatis配置xml最新dtd文件

    最新版的mybatis配置xml文件所需的dtd文件

    XML实验(1) - XML Basics & DTD

    2、熟悉和掌握XML规范的基本内容,包括XML声明、注释、处理指令、元素、属性、CDATA段、预定义实体、命名空间的使用,以及如何进行XML文档良构和有效性验证;能够灵活地使用XML层次数据来表示各种信息。 3、掌握如何...

    dtd.rar_dtd_java dtd_xml dtd

    可以验证DTD规范的java程序,DTD规范是验证XML文件是否合法的文件

    用于XML模式和DTD规范化设计的层次模式设计

    用于XML模式和DTD规范化设计的层次模式设计

    在Eclipse中导入dtd和xsd文件,使XML自动提示

    在Eclipse中导入dtd和xsd文件,使XML自动提示 DTD 类型约束文件 1. Window-&gt;Preferences-&gt;XML-&gt;XML Catalog-&gt;User Specified Entries窗口中,选择Add 按纽 2.在Add XML Catalog Entry 对话框中选择或输入以下...

Global site tag (gtag.js) - Google Analytics