首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据Java中的模式定义获取xml Node类型?

如何根据Java中的模式定义获取xml Node类型?
EN

Stack Overflow用户
提问于 2009-12-10 17:36:22
回答 4查看 3.5K关注 0票数 1

假设我有一个doc.xml和相应的doc.xsd。我使用xpath来检索一些节点,因此我得到了一个org.w3c.dom.Node列表。如何从模式中获取每个节点的类型,例如:xs:整数,xs:字符串等?

一些解决方案是使用node.getNodeName()作为NodeName,使用xpath查询"//NodeName@type“解析模式,但这并不完美。我不能肯定模式是优雅的-如果NodeName存在于模式中的许多地方,并且没有作为单独的类型提取出来,那该怎么办?

因此,一般来说,我正在寻找一种可靠的解决方案来获取任何有效xml & xsd的节点类型。

EN

回答 4

Stack Overflow用户

发布于 2009-12-12 05:29:36

您应该考虑使用JAXB。它将根据模式类型为您创建Java类。然后将XML文档读入到这些类中,这些类根据您定义XSD的方式进行类型化。因此,xsd:int映射到java int(或者Integer包装类,我记不起来了),等等。

票数 1
EN

Stack Overflow用户

发布于 2010-08-10 06:18:38

将您的DOM元素转换为TypeInfo:从那里,您可以访问您正在寻找的类型信息。

票数 1
EN

Stack Overflow用户

发布于 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来完成。问题变成了它真的值得吗?我会说很可能不会。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1879840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档