xml - 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 来验证具有“名称”属性的参数列表:
<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>
另外我需要的是确保存在一个具有属性名称=“路径”的参数元素。不幸的是不能改变输入的xml。
你有什么想法?
编辑:删除了 xsd 1.1 标记,因为您的工具“XML 检查”不支持 xsd 1.1
解决方案
如果您按照标签的建议使用 XSD 1.1,那么这很容易:
<xs:assert test="count(parameter[@name='path'])=1"/>
推荐阅读
- excel - 自动将 Excel 中的值填充到 Confluence 时间线中
- c - OpenMP 的 VSCode 自动完成功能
- google-chrome - 如何在不属于您的站点上的浏览器中处理 WebSocket?
- oracle - Oracle Text - 索引文档,其中每个文档都有多种语言突变
- assembly - 无效的注册
- javascript - 输入焦点更改时 KeyboardAvoidinView 不起作用
- asp.net - 为什么 ASP.net 身份验证模板不包含 Redux 和 React?
- python - 即使在我关闭 python 程序后,如何保持计数保持在正确的数字上
- python - SQLAlchemy 完整性错误唯一约束失败:users.login
- python - TypeError:__str__ 在 Django 中返回非字符串(类型 NoneType)