Java 如何在没有本地XSD文件的情况下根据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:

<?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很容易:


这毫无意义。如果没有架构文件,则无法确定文档是否符合架构。@Mike这没有意义,没有办法?什么是“其架构”?不清楚是否要通过从命名空间URI中使用的URL检索来验证第一个架构.xsd和第二个架构.xsd,或者是否要根据另一个(未命名)架构验证实例文档。请澄清要针对哪个架构验证实例文件。@Mads我要针对
第二个架构.xsd
验证
元素,针对
第一个架构.xsd
验证
元素。如果命名空间-uri()使用URL并且架构托管在这些URL上(约定,但不是要求)然后你可以使用@Blaise Doughan建议的代码。如果您没有找到/检索模式的方法,那么很难根据它们进行验证。谢谢,但这不是我要寻找的。我在问题中解释说,我没有指向XML模式的URL,因为我不知道文档中使用的是什么XML模式。您可以使用StAX XMLStreamReader来解析XML。然后您可以从xmlns声明中窥探模式(注意xmlns声明中的uri不能保证是真实的url)。然后将验证代码与StatxSource一起使用。