使用XPath获取XML-Schema限制

时间:2013-02-05 08:24:10

标签: xml xpath xsd

我试图获取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。

1 个答案:

答案 0 :(得分:1)

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

其次,你说你想要“填表”结果。也就是说,您想要的结果比简单的字符串,数字或节点集更复杂。因此,您不在XPath的域之内,而是在XQuery或XSLT中 - 您希望构建结构化结果。