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文档被用于不同系统之间的数据交换时,校验可以避免...
综上所述,"通过Schema验证XML文件格式是否正确"这个主题涵盖的内容广泛,涉及到XML基础、Schema规范、C#编程以及XML处理的技巧,对于开发和维护涉及XML数据的应用来说,这些都是必不可少的知识点。
总的来说,这个课程涵盖了XML编程的基础,从创建和编辑XML文档,定义和使用DTD,到验证XML的正确性,都是构建可扩展、可维护的PHP应用程序所必不可少的知识。通过学习这些内容,开发者可以更好地处理和传输结构化...
XML Schema(XSD)作为一种用于描述XML文档结构和数据类型的标准,提供了更为强大的数据类型支持和约束定义能力,相较于早期的DTD(Document Type Definition),XSD被更多地应用于XML文档的校验中。 然而,Java中...
- **数据完整性**:通过DTD,开发者可以在数据输入到系统之前就进行校验,确保数据的正确性。 - **规范文档结构**:DTD定义了文档的基本结构,包括元素的层次关系、属性等,有助于维护文档的清晰度。 #### 二、DTD...
在开发过程中,通过DTD校验可以确保XML配置文件的正确性,避免因配置错误而导致的运行时异常。对于像Struts这样的MVC框架,正确的DTD校验能帮助开发者快速定位配置问题,提高代码质量。 #### 二、MyEclipse内置DTD...
在实际应用中,`CastorTest`可能是一个包含测试代码的文件,用于验证上述过程的正确性。通过编写单元测试,你可以确保XML解析和校验功能按预期工作。 总结来说,Castor结合XSD提供了强大的XML处理能力,能够简化XML...
因此,解析器也分为两种,一种是验证的,即会跟据XML文件中的声明,用相应的DTD文件对XML文件进行校验,检查它是否满足DTD文件的要求。另一种是忽略DTD文件,只要基本格式正确,就可以进行解析。 就我所知,验证的...
通过定义XML Schema,可以约束XML文件的结构和数据类型,保证数据的正确性。在解析XML时,可以使用`SchemaFactory`和`Validator`进行校验。 总之,这个压缩包提供的源码涵盖了XML解析的核心技术,包括DOM和SAX解析...
XML文档的结构严谨,为了确保其正确性和有效性,通常会使用XML校验工具来验证XML文档是否符合预定义的XML Schema(XSD)规范。"xmlValidate.rar" 是一个压缩包,包含了XML校验相关的工具和资源,便于用户进行XML报文...
在Mybatis的环境中,DTD文件主要用来验证XML配置文件的正确性,确保其符合预定义的规则。以下将详细讲解如何配置Mybatis的DTD环境: 首先,打开Eclipse或类似的IDE,开始进行DTD的环境配置。在Eclipse中,可以通过...
XML文档的结构严谨,为了确保XML文件的数据正确性和一致性,XML验证成为了一个重要的步骤。XML验证通常有两种方式:DTD(Document Type Definition)验证和XSD(XML Schema Definition)验证。本话题主要关注的是XSD...
在本篇文章中,我们将详细介绍如何通过XML配置文件来实现对Struts2框架中的Action类的所有方法进行输入数据的校验。这种方法不仅提高了代码的可维护性,还简化了校验逻辑的编写过程。下面将分步骤讲解整个实现过程。...
验证XML文档的正确性是开发过程中不可或缺的步骤。可以使用XML解析器,如Microsoft.XMLDOM(在IE5及以上版本的浏览器中内置),来加载XML文件并进行DTD验证。在JavaScript中,可以通过创建XML文档解析器对象,开启...
XML 文档的合法性是保证 XML 文档正确性的一个重要方面。 本资源摘要信息涵盖了 XML 技术及应用的相关知识点,包括 XML 文档的结构定义、编程接口、文档类型定义(DTD)和 XPath 表达式等,为 IT 专业人员和开发者...
expat是一个由C语言编写的XML解析库。...是验证的会跟据XML文件中的声明,用相应的DTD文件对XML文件进行校验,检查它是否满足DTD文件的要求。非验证性的则忽略DTD文件,只要基本格式正确,就可以进行解析
在XMLSpyEnt中,可以对xml文件进行Schema校验,以确保xml文件的正确性。校验步骤如下: 1. 点击Validate图标,进行Schema校验。 2. 如通过Schema校验,Messages中会显示以下信息。 3. 如Schema校验出现错误,...
在本主题中,我们主要关注的是"Mybatis DTD文件",这是一个用于验证MyBatis配置文件的文档类型定义(DTD),以确保XML配置的正确性。 在开发过程中,当使用MyEclipse编写MyBatis的配置文件时,如果网络连接不可用,...
例如,当接收到XML数据时,开发者可以利用DTD进行校验,确保数据的完整性和正确性,避免因数据错误导致的程序异常。 总之,"java开发jar包dtd.zip"可能是一个包含多种Java库JAR包和DTD文件的资源集合,用于支持XML...
- 验证需求:如果需要确保XML文档的语义正确性,选择支持验证的库如LibXML2、XML4C或Xerces-C。 - 易用性:如果希望有一个面向对象的API来简化代码,DOM解析库如TinyXml可能更合适。 - 国际化:如果项目涉及到多语言...