XML模式唯一的子元素
发布时间:2020-12-16 22:44:15 所属栏目:百科 来源:网络整理
导读:我试图通过元素名称验证父元素是否具有唯一的子元素. 我还需要验证至少存在一个可能的元素. 例 StorageTypes Status/ Warning/ Error/ /StorageTypes 会有效但是 StorageTypes Status/ Status/ Warning/ Error/ /StorageTypes 和 StorageTypes /StorageTypes
我试图通过元素名称验证父元素是否具有唯一的子元素.
我还需要验证至少存在一个可能的元素. 例 <StorageTypes> <Status/> <Warning/> <Error/> </StorageTypes> 会有效但是 <StorageTypes> <Status/> <Status/> <Warning/> <Error/> </StorageTypes> 和 <StorageTypes> </StorageTypes> 会无效的. 我已经尝试使用xs:unique,选择当前节点,但是我无法通常使用field元素选择元素. 以下是我想要做的事情,但它不是我想要的强大解决方案.我希望能够添加更多类型,而不是为每个更改更改xpath. <element ect.> <xs:unique name="something"> <xs:selector xpath="."/> <xs:field xpath="Status"/> <xs:field xpath="Warning"/> <xs:field xpath="Error"/> </xs:unique> </element> 这可能吗?这是好习惯吗?任何意见,将不胜感激. 解决方法
不可能使用基于XSD 1.0的通用解决方案.我不相信你的独特性能达到你想要的,只是因为使用text()来评估一个字段的值;所以标签的名称永远不会在这个…
虽然你可能能够达到你想要的东西,但它可能不适用于所有场景,或者它缺乏优雅或可行性…… 某些人可能不会认为下面的方法是优雅的……尽管如此,它可以起到同样的作用. 例如,如果您使用属性来捕获“标记”名称,则如下所示: <StorageTypes> <Storage type="Status"/> <Storage type="Warning"/> <Storage type="Error"/> </StorageTypes> 然后在@type字段上编写您的唯一,并结合一系列存储,maxOccurs = whatever会严格按照您的描述给出. 如果您正在寻找实际上具有复杂内容的元素,或者不允许属性,那么您可以使用替换组来实现相同的效果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |