2013-02-05 52 views
0

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

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

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

这让我的限制,喜欢的minOccurs等,但我需要与他们的@名值的父元素。

回答

1

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

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

+0

谢谢你的回答。我正在尝试创建一个表单,用户用值填充很多字段。这些值有限制,如最小/最大长度,模式,最小/最大等等。这些限制位于我想要解析的XML-Schemafile中,以便在输入无效值时创建工具提示或创建错误消息。模式文件不会有太大的变化,例如,唯一可能发生的变化是,一个元素变得可选,或者长度被扩展。由于模式文件非常“容易”结构化,我只需要读取每个元素/ simpleType的这些限制。 – whocares81