在没有 Soap Envelope 的情况下使用 XSD 验证 XML 数据

Validate XML data with XSD without Soap Envelope

我有 XML 带有 SOAP 信封的数据,但我的 XSD 模式只能验证信封内的 XML 数据。我期待着我可以编辑 XSD 并遍历并仅验证信封内的 xml 的机制。

例如,在 XSLT 中我们可以选择设置根参数 <xsl:template match="*:MsgHeader"> 而不是 <xsl:template match="*:Envelope">

正如您所建议的,在 XSLT (2.0+) 中进行验证是一种选择 - 但可能不是一个很好的选择,因为 XSLT 在第一次验证错误后停止。

如果您使用 Saxon 作为验证引擎,那么您可以像这样从 Java 执行所需的验证:

Processor p = new Processor(true);
SchemaManager sm = p.getSchemaManager();
sm.load(new StreamSource(new File('schema.xsd')));
SchemaValidator sv = sm.newSchemaValidator();
DocumentBuilder db = p.newDocumentBuilder();
XdmNode doc = db.build(new StreamSource(new File('source.xml')));
XdmNode target = (XdmNode)doc.select(descendant("payload")).findFirst().get();
sv.validate(target.asSource());