Java 如何在没有本地XSD文件的情况下根据XML模式验证XML?
这是我的XML:Java 如何在没有本地XSD文件的情况下根据XML模式验证XML?,java,xml,xsd,Java,Xml,Xsd,这是我的XML: <?xml version="1.0"?> <root xmlns="http://example.com/first-schema.xsd" xmlns:f="http://example.com/second-schema.xsd"> <f:foo>test</f:foo> </root> 测试 现在我想验证这个XML是否为XMLSchema有效。我在本地没有这些first schema.xsd和se
<?xml version="1.0"?>
<root xmlns="http://example.com/first-schema.xsd"
xmlns:f="http://example.com/second-schema.xsd">
<f:foo>test</f:foo>
</root>
测试
现在我想验证这个XML是否为XMLSchema有效。我在本地没有这些first schema.xsd
和second schema.xsd
文件。而且,我对他们一无所知。我只想确保我的XML文档对其模式是有效的。可以在Java中执行此操作吗?您可以使用API执行此操作
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
URL schemaURL = // The URL to your XML Schema;
Schema schema = sf.newSchema(schemaURL);
Validator validator = schema.newValidator();
DOMSource source = new DOMSource(xmlDOM);
validator.validate(source);
下面的示例演示了如何根据模式验证JAXB对象模型,但您会发现用DOMSource for DOM替换JAXBSource很容易:
第二个架构.xsd
验证
元素,针对第一个架构.xsd
验证
元素。如果命名空间-uri()使用URL并且架构托管在这些URL上(约定,但不是要求)然后你可以使用@Blaise Doughan建议的代码。如果您没有找到/检索模式的方法,那么很难根据它们进行验证。谢谢,但这不是我要寻找的。我在问题中解释说,我没有指向XML模式的URL,因为我不知道文档中使用的是什么XML模式。您可以使用StAX XMLStreamReader来解析XML。然后您可以从xmlns声明中窥探模式(注意xmlns声明中的uri不能保证是真实的url)。然后将验证代码与StatxSource一起使用。