假设我有一个doc.xml和相应的doc.xsd。我使用xpath来检索一些节点,因此我得到了一个org.w3c.dom.Node列表。如何从模式中获取每个节点的类型,例如:xs:整数,xs:字符串等?
一些解决方案是使用node.getNodeName()作为NodeName,使用xpath查询"//NodeName@type“解析模式,但这并不完美。我不能肯定模式是优雅的-如果NodeName存在于模式中的许多地方,并且没有作为单独的类型提取出来,那该怎么办?
因此,一般来说,我正在寻找一种可靠的解决方案来获取任何有效xml & xsd的节点类型。
发布于 2009-12-12 05:29:36
您应该考虑使用JAXB。它将根据模式类型为您创建Java类。然后将XML文档读入到这些类中,这些类根据您定义XSD的方式进行类型化。因此,xsd:int映射到java int(或者Integer包装类,我记不起来了),等等。
发布于 2010-08-10 06:18:38
将您的DOM元素转换为TypeInfo:从那里,您可以访问您正在寻找的类型信息。
发布于 2009-12-11 00:19:12
不幸的是,XML模式(XSD)或文档类型定义(DTD)中定义的类型并没有直接绑定到它们所验证的XML文档。XML文档中的元素和属性本身并没有类型,它们只是文本。可以将XSD看作是验证XML文档的脚本,而不是元素和属性的一组类型注释。
XML规范并没有像您在这里考虑的那样定义类型。即使是可以嵌入到XML文档中的文档类型定义(DTD)也更多地关注文档的结构,而不是元素和属性中包含的数据的类型。
XML Schema中描述的类型系统是一个可选的验证层,可应用于XML文档。由于此验证是可选的,因此标准XML不提供将XSD中的验证规则绑定到实际属性和元素的方法。
我认为XML可以提供一种将XSD绑定到特定XML文档的机制,但我不知道有哪个XML解析器可以做到这一点。这并不容易,原因之一是XML Schema中定义的类型系统比大多数主流编程语言支持的类型系统丰富得多。在您的示例中,您可能只对xs:integer、xs:string等感兴趣,但是在XML Schema中,您可以创建指定范围、模式和其他内容的类型,这些内容在大多数编程语言中的数据类型中是不可能的。要用Java或任何编程语言表示这个复杂的类型系统,必须通过一个相当复杂的API来完成。问题变成了它真的值得吗?我会说很可能不会。
https://stackoverflow.com/questions/1879840
复制相似问题