`

编程实现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() + ">");
    }

}

 

分享到:
评论

相关推荐

    XML校验工具,可以用来进行XML合法性检验

    XML校验对于确保XML文档的正确性和一致性至关重要。校验过程可以检查文档是否符合预定义的结构和语法规则,这对于保证数据的准确性和完整性极为重要。特别是当XML文档被用于不同系统之间的数据交换时,校验可以避免...

    通过Schema验证XML格式是否正确

    综上所述,"通过Schema验证XML文件格式是否正确"这个主题涵盖的内容广泛,涉及到XML基础、Schema规范、C#编程以及XML处理的技巧,对于开发和维护涉及XML数据的应用来说,这些都是必不可少的知识点。

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

    总的来说,这个课程涵盖了XML编程的基础,从创建和编辑XML文档,定义和使用DTD,到验证XML的正确性,都是构建可扩展、可维护的PHP应用程序所必不可少的知识。通过学习这些内容,开发者可以更好地处理和传输结构化...

    Java通过XML Schema校验XML

    XML Schema(XSD)作为一种用于描述XML文档结构和数据类型的标准,提供了更为强大的数据类型支持和约束定义能力,相较于早期的DTD(Document Type Definition),XSD被更多地应用于XML文档的校验中。 然而,Java中...

    XML的DTD教程

    - **数据完整性**:通过DTD,开发者可以在数据输入到系统之前就进行校验,确保数据的正确性。 - **规范文档结构**:DTD定义了文档的基本结构,包括元素的层次关系、属性等,有助于维护文档的清晰度。 #### 二、DTD...

    自定义MyEclipse的DTD文档校验

    在开发过程中,通过DTD校验可以确保XML配置文件的正确性,避免因配置错误而导致的运行时异常。对于像Struts这样的MVC框架,正确的DTD校验能帮助开发者快速定位配置问题,提高代码质量。 #### 二、MyEclipse内置DTD...

    castor解析xml与xsd校验xml

    在实际应用中,`CastorTest`可能是一个包含测试代码的文件,用于验证上述过程的正确性。通过编写单元测试,你可以确保XML解析和校验功能按预期工作。 总结来说,Castor结合XSD提供了强大的XML处理能力,能够简化XML...

    tinyxml+tinyxpath组合编程套件,很好的编程工具,都是源码

    因此,解析器也分为两种,一种是验证的,即会跟据XML文件中的声明,用相应的DTD文件对XML文件进行校验,检查它是否满足DTD文件的要求。另一种是忽略DTD文件,只要基本格式正确,就可以进行解析。 就我所知,验证的...

    商业编程-源码-介绍两个 XML 文件操作类.zip

    通过定义XML Schema,可以约束XML文件的结构和数据类型,保证数据的正确性。在解析XML时,可以使用`SchemaFactory`和`Validator`进行校验。 总之,这个压缩包提供的源码涵盖了XML解析的核心技术,包括DOM和SAX解析...

    xmlValidate.rar

    XML文档的结构严谨,为了确保其正确性和有效性,通常会使用XML校验工具来验证XML文档是否符合预定义的XML Schema(XSD)规范。"xmlValidate.rar" 是一个压缩包,包含了XML校验相关的工具和资源,便于用户进行XML报文...

    配置Mybatis_DTD环境

    在Mybatis的环境中,DTD文件主要用来验证XML配置文件的正确性,确保其符合预定义的规则。以下将详细讲解如何配置Mybatis的DTD环境: 首先,打开Eclipse或类似的IDE,开始进行DTD的环境配置。在Eclipse中,可以通过...

    XML验证器(XSD验证XML)

    XML文档的结构严谨,为了确保XML文件的数据正确性和一致性,XML验证成为了一个重要的步骤。XML验证通常有两种方式:DTD(Document Type Definition)验证和XSD(XML Schema Definition)验证。本话题主要关注的是XSD...

    基于XML配置方式实现对action的所有方法进行输入校验

    在本篇文章中,我们将详细介绍如何通过XML配置文件来实现对Struts2框架中的Action类的所有方法进行输入数据的校验。这种方法不仅提高了代码的可维护性,还简化了校验逻辑的编写过程。下面将分步骤讲解整个实现过程。...

    xml约束 xml经典之二

    验证XML文档的正确性是开发过程中不可或缺的步骤。可以使用XML解析器,如Microsoft.XMLDOM(在IE5及以上版本的浏览器中内置),来加载XML文件并进行DTD验证。在JavaScript中,可以通过创建XML文档解析器对象,开启...

    XML考试题库大全

    XML 文档的合法性是保证 XML 文档正确性的一个重要方面。 本资源摘要信息涵盖了 XML 技术及应用的相关知识点,包括 XML 文档的结构定义、编程接口、文档类型定义(DTD)和 XPath 表达式等,为 IT 专业人员和开发者...

    expat-win32bin-2.0.1

    expat是一个由C语言编写的XML解析库。...是验证的会跟据XML文件中的声明,用相应的DTD文件对XML文件进行校验,检查它是否满足DTD文件的要求。非验证性的则忽略DTD文件,只要基本格式正确,就可以进行解析

    XMLSpy使用说明及技巧

    在XMLSpyEnt中,可以对xml文件进行Schema校验,以确保xml文件的正确性。校验步骤如下: 1. 点击Validate图标,进行Schema校验。 2. 如通过Schema校验,Messages中会显示以下信息。 3. 如Schema校验出现错误,...

    mybatis dtd 文件

    在本主题中,我们主要关注的是"Mybatis DTD文件",这是一个用于验证MyBatis配置文件的文档类型定义(DTD),以确保XML配置的正确性。 在开发过程中,当使用MyEclipse编写MyBatis的配置文件时,如果网络连接不可用,...

    java开发jar包dtd.zip

    例如,当接收到XML数据时,开发者可以利用DTD进行校验,确保数据的完整性和正确性,避免因数据错误导致的程序异常。 总之,"java开发jar包dtd.zip"可能是一个包含多种Java库JAR包和DTD文件的资源集合,用于支持XML...

    XML开发库对比

    - 验证需求:如果需要确保XML文档的语义正确性,选择支持验证的库如LibXML2、XML4C或Xerces-C。 - 易用性:如果希望有一个面向对象的API来简化代码,DOM解析库如TinyXml可能更合适。 - 国际化:如果项目涉及到多语言...

Global site tag (gtag.js) - Google Analytics