2012-02-14 6 views
5

Tôi gặp sự cố với xác thực X # xDococument XSD.

Các tập tin sau đây được xác nhận cũng bởi Xml Spy, nhưng không phải bởi Net (C#)

<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Simple.xsd"> 
    <Var Name="$Toto"/> 
</Root> 

Schema

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="Root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="Var"> 
        <xs:complexType> 
         <xs:attribute name="Name" type="ST_VariableIdentifier" use="required"/> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
     <xs:simpleType name="ST_VariableIdentifier"> 
     <xs:restriction base="xs:string"> 
      <xs:pattern value="$[a-z,A-Z]*"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

Một ý tưởng?

+2

Điều này có lợi từ thẻ C# không? – sbi

+0

Đây là lỗi trong C#, trong đó có một giải pháp thay thế: sử dụng [$]. Đừng bận tâm khi thử các tham chiếu ký tự như vậy, ví dụ: $, vì lý do nào đó C# rất cầu kỳ ở đây ... –

Trả lời

4

Điều này sẽ hiệu quả!

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="Root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Var"> 
      <xs:complexType> 
      <xs:attribute name="Name" type="ST_VariableIdentifier" use="required"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:simpleType name="ST_VariableIdentifier"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[$][a-z,A-Z]*"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 
+0

Cảm ơn, nó hoạt động tốt. – swWork

+0

Bạn được chào đón :) –

+0

Xin vui lòng chấp nhận câu trả lời, nếu nó thực sự là một giải pháp cho bạn :) cảm ơn. –

0

Chỉ để thêm vào câu trả lời hiện có. Đây thực sự là một "lỗi" được biết đến trong việc thực hiện .Net các thông số W3C (được thừa nhận here trên Kết nối, nhưng Sẽ không sửa lỗi).

MSDN cung cấp thêm thông tin (here), cùng với giải pháp được đề cập ở trên.

Việc thực hiện System.Xml của World Wide Web Consortium (W3C) khuyến nghị cho XML Schemas sử dụng lớp Regex để thực hiện khớp mẫu của biểu thức thông thường. Trong một số trường hợp, hành vi được đề xuất bởi W3C khác với hành vi của lớp RegEx. Các Sau đây là các trường hợp được biết đến nơi thi hành System.Xml của khớp mẫu khác với đặc điểm kỹ thuật của W3C:

Theo W3C cho đặc tả XML Schema, dấu đô la ($) phải được coi là một nhân vật thường xuyên . Tuy nhiên, xác thực System.Xml diễn giải ký hiệu đô la trong mẫu xs: dưới dạng một neo cố định cuối dòng . Cách giải quyết có thể là thay thế $ bằng [$]. Nếu mẫu của bạn đã có trong ngoặc vuông, chẳng hạn như [abc $], nó không phải là cần thiết để thực hiện bất kỳ thay đổi nào.