使用Java查找可以在xml模式中重复的项目
在Java中处理XML模式(无需使用XSLT),我们使用Xerces2 Java解析器。我们可能需要以下软件包/类:
import org.w3c.dom.*; import org.apache.xerces.xs.*; import org.apache.xerces.dom.DOMXSImplementationSourceImpl; import org.apache.xerces.impl.xs.util.StringListImpl; import org.apache.xerces.util.XMLCatalogResolver;
然后,处理XSD文件的过程如下:
// 获取XML Schema实现 XSImplementation impl = (XSImplementation) (new DOMXSImplementationSourceImpl()).getDOMImplementation(XMLConstants.XSD_LOADER_NAME); // 获取模式加载器 XSLoader schemaLoader = impl.createXSLoader (null); // 可选。指定错误处理程序 DOMErrorHandler errorHandler = ....; DOMConfiguration config = schemaLoader.getConfig(); config.setParameter("error-handler", errorHandler); // 可选。指定XML目录解析器。 // 这可能需要重定向内部DTD/模式文件引用 XMLCatalogResolver catalogResolver = ...; config.setParameter("resource-resolver", catalogResolver); String xsdURI = ...; // 模式文件的位置 // 读取模式 XSModel xsModel = schemaLoader.loadURI(xsdURI); // 处理模式(在这里,您可以做任何您想做的事情) XSNamedMap xsMap; // 处理顶级元素声明 xsMap = xsModel.getComponents(XSConstants.ELEMENT_DECLARATION); for (int i = 0; i < xsMap.getLength(); i ++) { XSElementDeclaration xsElementDecl = (XSElementDeclaration) xsMap.item(i); ... } // 处理顶级类型定义 xsMap = xsModel.getComponents(XSConstants.TYPE_DEFINITION); for (int i = 0; i < xsMap.getLength(); i ++) { XSTypeDefinition xsTDef = (XSTypeDefinition) xsMap.item(i); ... } // 处理模型组定义 xsMap = xsModel.getComponents(XSConstants.MODEL_GROUP_DEFINITION); for (int i = 0; i < xsMap.getLength(); i ++) { XSModelGroupDefinition xsGroupDef = (XSModelGroupDefinition) xsMap.item(i); ... } ...
你好,我试图使用XERCES2
根据您的评论,但我在解析过程中无法找到ComplexType内的所有元素。我在这里发表了问题:stackoverflow.com/questions/66856898/…如果您有机会,请查看并提供可能的解决方案。非常感谢 🙂