xsd的unique验证

由于 xpath 1.0 中没有默认空间的概念,没有前缀的元素都将被视为无名称空间中的元素。所以无法进行唯一性约束。

xsd 文档 user.xsd:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema   targetNamespace="http://www.user.com" xmlns:us="http://www.user.com"
 attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 
 <xs:element name="Users">
    <xs:complexType>
      <xs:sequence>
          <xs:element name="name" type="xs:string" maxOccurs="unbounded" minOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
    <xs:unique name="nameUnique">
            <xs:selector xpath=" us:name" />
            <xs:field xpath="." />
          </xs:unique>          
  </xs:element>
</xs:schema>

xml文件 user.xml:

<?xml version="1.0" encoding="utf-8"?>
<Users>
  <name>aa</name>
  <name>bb</name>
  <name>aa</name>
</Users>


本来xml文件应该:

<?xml version="1.0" encoding="utf-8"?>
<Users  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.user.com"
        xsi:schemaLocation="http://www.user.com user.xsd">
<name>aa</name>
  <name>bb</name>
  <name>aa</name>
</Users>

给xml文件添加属性:
XmlElement root = doc.DocumentElement;
root.SetAttribute("xmlns:xsi", @"http://www.w3.org/2001/XMLSchema-instance");
root.SetAttribute("xmlns", @"http://www.user.com");
root.SetAttribute("xsi:schemaLocation", @"http://www.user.com user.xsd");

加上属性后的文档
<?xml version="1.0" encoding="utf-8"?>
<Users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.user.com"
schemaLocation="http://www.user.com user.xsd">
<name>aa</name>
<name>bb</name>
<name>aa</name>
</Users>
提示错误:未声明“schemaLocation”属性。
其中 schemaLocation 前面没有 xsi?。


下面的代码可以验证通过

            XmlElement root = doc.DocumentElement;
            //root.SetAttribute("xmlns:xsi", @"http://www.w3.org/2001/XMLSchema-instance");
            root.SetAttribute("xmlns", @"http://www.user.com");
            //root.SetAttribute("xsi:schemaLocation", @"http://www.user.com user.xsd");
           
            


            TextReader reader = new StringReader(doc.InnerXml);

            XmlReaderSettings settings = new XmlReaderSettings();
            settings.ValidationType = ValidationType.Schema;
           
            settings.Schemas.Add(null, xsdPath);
            XmlReader xmlReader = XmlReader.Create(reader, settings);

            try
            {
                while (xmlReader.Read())
                {
                }
            }
            catch (Exception ce)
            {
                throw new Exception(ce.Message);               
            }

提示错误:“http://www.user.com:nameUnique”键或唯一标识约束中包含重复的键序列“aa”。

转载于:https://www.cnblogs.com/ugvanxk/archive/2009/04/14/1435760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值