0

我正在尝试获取 XML 模式文件中元素、simpleTypes 和 complexTypes 的所有限制(minOccurs、maxOccurs、totalDigits、maxLength 等)。由于这些限制在子元素中,应该可以根据 xsd:element、xsd:simpleType 和 xsd:complexType 以及属性“name”的值选择这些限制元素。然后,我可以逐个元素地遍历结果集,并在表格中填充每个元素的限制。

不幸的是,我无法构建这样的 XPath 表达式。也许这甚至不可能?这是我到目前为止所拥有的:

//*[xsd:element[@name] or xsd:simpleType[@name] or xsd:complexType[@name]]//xsd:restriction/descendant::*

这让我得到了限制,比如 minOccurs 等,但我需要让父元素带有它们的@name-value。

4

1 回答 1

2

首先,在 XML 级别处理原始模式文档是很困难的,除非您知道模式作者正在以特定方式使用该语言。写同一件事的方法太多了(例如,使用模型组、属性组、xs:include、命名类型与匿名类型等)。您可以通过使用模式 API 访问已编译模式或使用 Saxon 的 SCM(它是已编译模式的 XML 表示)来避免此问题 - 这消除了表面语法变化并允许您访问底层模式组件模型,在XML 表示。

其次,你说你想用结果“填满一张桌子”。也就是说,您想要的结果比简单的字符串、数字或节点集更复杂。因此,您在 XPath 的域之外并进入了 XQuery 或 XSLT——您想要构造一个结构化的结果。

于 2013-02-05T11:19:11.387 回答