JAVA:如何使用具有相同targetNamespaces的多个模式使用xerces SAXParser

问题描述:

我需要使用一组模式对传入的一段XML执行一些验证。JAVA:如何使用具有相同targetNamespaces的多个模式使用xerces SAXParser

所有这些模式共享相同的targetNamespace,但分为不同的.xsd文件。

我的java程序正在将每个xsd文件加载到InputSource []数组中并将它们传递到SAX解析器(SCHEMA_SOURCE属性)。 然而,调用XMLReader.parse方法时,出现以下堆栈跟踪:

** java.lang.IllegalArgumentException异常:当使用对象的阵列SCHEMA_SOURCE属性的值,没有两个架构应该共享相同的目标名称。 at org.apache.xerces.impl.xs.XMLSchemaLoader.processJAXPSchemaSource(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaLoader.loadSchema(Unknown Source) at org.apache.xerces.impl.xs。 XMLSchemaValidator.findSchemaGrammar(来源不明) 在org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(来源不明) 在org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(来源不明) 在org.apache .xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(来源不明) 在org.apache.xerces.impl.XMLNSDocumentScannerImpl $ NSContentDispatcher.scanRootElementHook(来源不明) 在org.apache.xerces.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDispatcher.dispatch(来源不明) at org.apache。 xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache .xerces.parsers.XMLParser.parse(来源不明) 在org.apache.xerces.parsers.AbstractSAXParser.parse(来源不明) **

我需要解析使用共享命名空间的架构的XML。是否有可能做到这一点,并避免上述错误?

的帮助或建议,任何形式应理解

感谢

不,这是不可能的。它由XML and schema specification执行。

一个实体或一个属性只能与一个名称空间相关联,或者是隐式的默认名称空间,或者是一个明确的名称空间作为前缀。

一个忠告:如果你的XML输入格式良好的,但不能被确认,因为没有命名空间声明,但你有一个想法如何实现能猜测命名空间是什么,每个节点根据上下文逻辑像之前的节点或其父节点一样。可以创建预处理器:

  • 解析XML输入节点作为DOM(或甚至与一个SAXParser的),而不模式验证
  • 施加这样的逻辑和预挂起实体和/或与猜到属性命名空间
  • 再次输出为XML;在该步骤中,您可以选择使用一个相当格式化为调试目的
  • 现在注入的是输出到您现有的解析器与架构验证