java - 如何判断 XML 文档是否针对 DTD 或 XSD 进行验证?

标签 java xml validation xsd dtd

在 Java 中,我可以使用 javax.xml.validation.Validator 根据 XSD 模式验证 XML 文档,或者通过使用 org.xml.sax.XMLReader 简单地解析文档来根据 DTD 验证 XML 文档。

但我需要的是一种以编程方式确定文档本身是针对 DTD(即它包含 <!DOCTYPE ...> 语句)还是 XSD 进行验证的方法。理想情况下,我需要在不将整个 XML 文档加载到内存中的情况下执行此操作。有人可以帮忙吗?

(或者,如果有一种单一方法来验证 Java 中的 XML 文档,同时适用于 XSD 和 DTD - 并允许自定义资源解析 - 那会更好!)

非常感谢,

一个

最佳答案

没有 100% 万无一失的过程来确定如何验证任意 XML 文档。

比如这个版本2.4 web application deployment descriptor指定 W3 schema验证文档:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

但是,这是表达同一事物的同样有效的方式:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee">

RELAX NG似乎没有一种机制可以在文档中提供您应该使用它的任何 提示。验证机制由文档消费者决定,而不是生产者。如果我没记错的话,这是插入从 DTD 转向更现代的验证机制的动力之一。

在我看来,最好的办法是根据您正在处理的文档类型集定制机制检测器,读取标题信息并适本地解释它。 StAX parser对此有好处 - 因为它是一种拉式机制,您可以只读取文件的开头,然后退出对第一个元素的解析。

Link to more of the same and sample code and whatnot.

关于java - 如何判断 XML 文档是否针对 DTD 或 XSD 进行验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/496369/

相关文章:

java - 如何调用和包含 ArrayList<Object>

java - MULE ESB 简单 SOAP 服务创建必填字段

php - 在 PHP(和/或 Zend Framework)中解析 XML 响应

php - 填充下拉选择列表

java - 如何验证 wicket 中的数字格式 TextField?

java - hibernate列名问题

java - JTextField setEnabled 与 setEditable

spring - Spring Boot 配置属性 Unresolved 占位符验证

c# - 如何将 Streamreader 数据转换为 XmlDocument?

java - 显示财务数据的 GWT 表