首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML中的唯一属性值

XML中的唯一属性值
EN

Stack Overflow用户
提问于 2014-01-08 05:15:34
回答 1查看 55关注 0票数 0

我是XML/XSD的新手,虽然有很多类似的相关问题,但我仍然不能让它工作。如果这个问题是先前问题的重复,我很抱歉。

我正在尝试使属性的唯一值起作用,但无法使其起作用。

下面是我的模式和相应的XML文件。

代码语言:javascript
复制
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.dolby.com/MY" targetNamespace="http://www.dolby.com/MY" xmlns="http://www.dolby.com/MY">

<xs:element name="MYCfg">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Section" maxOccurs="unbounded" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="SubSection" maxOccurs="unbounded" minOccurs="0">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Param" type="ParamType" maxOccurs="unbounded" minOccurs="0">

                  </xs:element>
                </xs:sequence>
                <xs:attribute type="xs:string" name="name" use="required"/>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute type="xs:string" name="name" use="required"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:key name="ParamId">
    <xs:selector xpath="xs:Section/SubSection/Param"/>
    <xs:field xpath="@ID"/>
  </xs:key>
  <xs:unique name="ParamIdUnique">
    <xs:selector xpath="xs:Section/SubSection/Param"/>
    <xs:field xpath="@ID"/>
  </xs:unique>
</xs:element>

<xs:complexType name="ParamType">
  <xs:sequence>
    <xs:element type="xs:string" name="Value"/>
  </xs:sequence>
    <xs:attribute type="xs:string" name="name" use="required"/>
    <xs:attribute type="xs:int" name="ID" use="required"/>
</xs:complexType>

</xs:schema>



<?xml version="1.0"?>
<tns:MYCfg xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.dolby.com/MY">

<tns:Section name="Network">
  <tns:SubSection name="DHCP">
    <tns:Param name="ip_address" ID="12345">
      <tns:Value>10.10.10.1</tns:Value>
    </tns:Param>
    <tns:Param name="subnet" ID="12345">
      <tns:Value>10.10.10.1</tns:Value>
    </tns:Param>
  </tns:SubSection>

<tns:SubSection name="Provisioning">
  <tns:Param name="ip_address" ID="12345">
    <tns:Value>10.10.10.1</tns:Value>
  </tns:Param>
  </tns:SubSection>

</tns:Section>

<tns:Section name="PBX">
  <tns:SubSection name="SIP">
  <tns:Param name="username" ID="12345">
    <tns:Value>user</tns:Value>
  </tns:Param>
  </tns:SubSection>
</tns:Section>

</tns:MYCfg>
EN

回答 1

Stack Overflow用户

发布于 2014-01-08 05:20:25

您需要在XPath表达式中一致地使用前缀,即

代码语言:javascript
复制
  <xs:unique name="ParamIdUnique">
    <xs:selector xpath="xs:Section/SubSection/Param"/>
    <xs:field xpath="@ID"/>
  </xs:unique>

你需要

代码语言:javascript
复制
  <xs:unique name="ParamIdUnique">
    <xs:selector xpath="tns:Section/tns:SubSection/tns:Param"/>
    <xs:field xpath="@ID"/>
  </xs:unique>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20982047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档