微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xsd:在元素集中强制单一出现属性值

如何解决xsd:在元素集中强制单一出现属性值

我是 xsd 文件领域的新手,并被一个问题困住了。 我有一个像这样的 xml 文件

<config version="1.6">
  <properties>
    <parameter name="path">Hello</parameter>
    <parameter name="name">World</parameter>
    <parameter name="run">13</parameter>
    <parameter name="rate">37</parameter>
  </properties>
</config>

我已经创建了一个 xsd 来验证具有 'name' 属性的参数列表:

<xs:element name="config" type="configType"/>

<xs:complexType name="parameterType">
  <xs:simpleContent>
    <xs:extension base="xs:string">
      <xs:attribute type="xs:string" name="name"/>
    </xs:extension>
   </xs:simpleContent>
</xs:complexType>

<xs:complexType name="propertiesType">
  <xs:sequence>
    <xs:element type="parameterType" name="parameter" maxOccurs="unbounded" minOccurs="0"/>
 </xs:sequence>
</xs:complexType>
  
<xs:complexType name="configType">
  <xs:sequence>
    <xs:element type="propertiesType" name="properties"/>
  </xs:sequence>
  <xs:attribute type="xs:float" name="version"/>
</xs:complexType>

此外,我还需要确保存在一个属性名称为="path"的参数元素。可惜不能更改输入的xml。

你有什么想法吗?

编辑:删除了 xsd 1.1 标签,因为您的工具“XML 检查”不支持 xsd 1.1

解决方法

如果您按照标签建议使用 XSD 1.1,那么这很容易:

<xs:assert test="count(parameter[@name='path'])=1"/>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。