Tag: xsom

从元素中使用XSOM获取minOccurs属性

如何使用XSOM解析器从元素中获取minOccurs属性? 我已经看到这个例子来获取与复杂类型相关的属性: private void getAttributes(XSComplexType xsComplexType){ Collection c = xsComplexType.getAttributeUses(); Iterator i = c.iterator();while(i.hasNext()){ XSAttributeDecl attributeDecl = i.next().getDecl(); System.out.println(“type: “+attributeDecl.getType()); System.out.println(“name:”+attributeDecl.getName()); } } 但是,似乎无法找到一种正确的方法来将它从一个元素中取出,例如: 谢谢!

XSD循环导入

我需要使用XSOM解析XSD,但此XSD包含循环导入。 A.xsd B.xsd XSOM无法解析模式,因为它检测到由于循环导入而已定义的元素。 所以我试图通过外化由A定义并在B中使用的元素来打破循环导入。 C.xsd包含A使用的元素B.请注意,这些元素不在A中使用。不要问我为什么在A中定义了这些元素。 A.xsd成了 B.xsd(导入C.xsd而不是A.xsd)成为 XSOM可以解析XSD。 但现在我无法使用以下代码创建架构: SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); sf.setResourceResolver(new MyResourceResolver()); 我使用与JDK 1.7捆绑在一起的标准实现。 我得到了例外: src-resolve: Cannot resolve the name ‘ns1:MyElement’ to a(n) ‘element declaration’ component. 问题是资源解析器是为B命名空间调用的,而不是为有意义的A命名空间调用的。 由于命名空间A由A.xsd和C.xsd共享,因此资源解析器无法找到C.xsd中定义的元素。 圆形import是否有效? 是否可以打破循环导入,以便XSOM解析然后由SchemaFactory加载?

使用Java中的XSOM解析XSD架构。 如何访问元素和复杂类型

我在Java中使用XSOM解析了很多.XSD文件。 我有两个.XSD文件,一个定义日历,第二个定义全局类型。 我希望能够阅读日历文件并确定: 日历有3个属性 有效的是名为eYN的ENUM Cal是一个字符串 状态是一个名为eSTATUS的ENUM Calendar.xsd gtypes.xsd 我尝试访问此信息的代码如下。 我对Java很陌生,所以任何风格批评都欢迎。 我真的需要知道 如何访问复杂类型cal并看到它是一个字符串? 如何访问Status的定义以查看它是eSTATUS 强调文本类型的枚举 我有几次尝试通过ComplexType和Elements和Content访问正确的信息。 但是,我只是没有得到它,我找不到任何有用的例子。 我希望(希望)当你知道如何时,最好的方法(相对)简单。 所以,再一次,如果有人能指出我正确的方向,那将是一个很大的帮助。 xmlfile = “Calendar.xsd” XSOMParser parser = new XSOMParser(); parser.parse(new File(xmlfile)); XSSchemaSet sset = parser.getResult(); XSSchema s = sset.getSchema(1); if (s.getTargetNamespace().equals(“”)) // this is the ns with all the stuff // in { // try ElementDecls Iterator […]

使用模式按照模式重新排序XML文档的元素

假设我有一个XML文档(表示为文本,W3C DOM,无论如何),还有一个XML Schema。 XML文档具有模式定义的所有正确元素,但顺序错误。 如何使用模式“重新排序”文档中的元素以符合模式定义的顺序? 我知道这应该是可能的,可能使用XSOM ,因为JAXB XJC代码生成器使用元素的正确序列化顺序来注释其生成的类。 但是,我不熟悉XSOM API,它非常密集,所以我希望你们中的一个人对它有一些经验,并且可以指出我正确的方向。 像“在这个父元素中允许哪些子元素,以什么顺序?”之类的东西。 让我举个例子。 我有一个像这样的XML文档: 我有一个XML Schema,它说的内容必须是然后是 。 现在很清楚,如果我尝试根据模式validation文档,它会失败,因为和的顺序错误。 但我知道我的文档提前是“错误的”,所以我还没有使用模式进行validation。 但是,我知道我的文档具有模式定义的所有正确元素,只是顺序错误。 我想要做的是以编程方式检查Schema(可能使用XSOM – 这是XML Schema的对象模型),并询问它应该是什么内容 。 API将公开“您需要后跟 ”的信息。 所以我使用我的XML文档(使用DOM API)并相应地重新安排,以便现在文档将根据模式进行validation。 了解XSOM在这里很重要 – 它是一个java API,它表示XML Schema中包含的信息, 而不是我的实例文档中包含的信息。 我不想做的是从架构生成代码,因为架构在构建时是未知的。 此外,XSLT没有用,因为元素的正确排序仅由模式中包含的数据字典决定。 希望现在已经足够明确了。