如何使用java验证xml与dtd?

时间:2012-01-02 10:14:49

标签: java xml dtd

我有以下xml文件:

<?xml version = "1.0" ?>
<Employee>
<Emp_Id> E-001</Emp_Id>
<Emp_Name> Vinod  </Emp_Name>
<Emp_E-mail> Vinod1@yahoo.com </Emp_E-mail>
</Employee>

我有以下dtd文件:

<!ELEMENT Employee (Emp_Id, Emp_Name, Emp_E-mail)>
<!ELEMENT Emp_Id (#PCDATA)>
<!ELEMENT Emp_Name (#PCDATA)>
<!ELEMENT Emp_E-mail (#PCDATA)>

我想使用java。

使用上面的dtd验证这个xml文件

请帮助,谢谢......: - )

2 个答案:

答案 0 :(得分:19)

你应该做三件事:

  • 在 XML声明之后使用doctype声明将源XML文档与其DTD相关联:

    <!DOCTYPE Employee SYSTEM "employee.dtd">
    

    注意:DOCTYPE根目录必须与源XML中的根元素匹配。

  • setValidating

  • trueDocumentBuilderFactory

  • 使用org.xml.sax.ErrorHandler

  • DocumentBuilder提供setErrorHandler个实例

这是一个完整的例子:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setValidating(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
builder.setErrorHandler(new ErrorHandler() {
    @Override
    public void error(SAXParseException exception) throws SAXException {
        // do something more useful in each of these handlers
        exception.printStackTrace();
    }
    @Override
    public void fatalError(SAXParseException exception) throws SAXException {
        exception.printStackTrace();
    }

    @Override
    public void warning(SAXParseException exception) throws SAXException {
        exception.printStackTrace();
    }
});
Document doc = builder.parse("employee.xml");

来源文件:

<?xml version="1.0"?>
<!DOCTYPE Employee SYSTEM "employee.dtd">
<Employee>
    <Emp_Id> E-001</Emp_Id>
    <Emp_Name> Vinod </Emp_Name>
    <Emp_E-mail> Vinod1@yahoo.com </Emp_E-mail>
</Employee>

答案 1 :(得分:1)

您只需阅读文件并报告例外情况(如果有)。这是您可以信赖的SAX parser example

为了验证您的XML和DTD,您只需要setValidating:

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setValidating(true); // since the default value is false

还在XML文件中声明DTD用法:

<?xml version="1.0"?>
<!DOCTYPE Employee SYSTEM "employee.dtd">
<Employee>