如何使用java通过dtd验证xml?

发布于 2024-12-24 01:44:51 字数 635 浏览 1 评论 0原文

我有以下 xml 文件:

<?xml version = "1.0" ?>
<Employee>
    <Emp_Id>E-001</Emp_Id>
    <Emp_Name>Vinod</Emp_Name>
    <Emp_E-mail>[email protected]</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 文件。

请帮忙谢谢..:-)

I have following xml file:

<?xml version = "1.0" ?>
<Employee>
    <Emp_Id>E-001</Emp_Id>
    <Emp_Name>Vinod</Emp_Name>
    <Emp_E-mail>[email protected]</Emp_E-mail>
</Employee>

I have following dtd file:

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

I want to validate this xml file with above dtd using java.

Please, help thanks..:-)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风为裳 2024-12-31 01:44:51

您应该做三件事:

  • 在 XML 声明之后使用文档类型声明将源 XML 文档与其 DTD 关联起来:

    
    

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

  • DocumentBuilderFactory 上的

    setValidating 设为 true

  • 使用 DocumentBuilder 提供一个 org.xml.sax.ErrorHandler 实例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> [email protected] </Emp_E-mail>
</Employee>

There are three things you should do:

  • Associate the source XML document with its DTD using a doctype declaration after the XML declaration:

    <!DOCTYPE Employee SYSTEM "employee.dtd">
    

    Note: The DOCTYPE root must match the root element in the source XML.

  • setValidating to true on the DocumentBuilderFactory

  • Provide an org.xml.sax.ErrorHandler instance to the DocumentBuilder using setErrorHandler

Here's a complete example:

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");

Source document:

<?xml version="1.0"?>
<!DOCTYPE Employee SYSTEM "employee.dtd">
<Employee>
    <Emp_Id> E-001</Emp_Id>
    <Emp_Name> Vinod </Emp_Name>
    <Emp_E-mail> [email protected] </Emp_E-mail>
</Employee>
掩饰不了的爱 2024-12-31 01:44:51

您只需要阅读文件并报告异常(如果有)。这是一个 SAX 解析器示例,您可以依靠。

为了验证您的 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>

You just need to read the files and report the exceptions, if any. Here is a SAX parser example you can rely upon.

In order to validate your XML and DTD you just need to setValidating:

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

Also declare the DTD usage in your XML file:

<?xml version="1.0"?>
<!DOCTYPE Employee SYSTEM "employee.dtd">
<Employee>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文