2012-02-14 20 views
5

C# XDocument XSD doğrulama ile ilgili bir sorunum var.

Aşağıdaki dosya Xml Spy tarafından iyi valide değil Net (C#)

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

Şema

<?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> 

Bir fikir tarafından edilir?

+2

Bu bir C# etiketinden yararlanır mı? – sbi

+0

Bu, bir geçici çözümün bulunduğu C# 'deki bir hatadır: [$] kullanın. Böyle karakter referanslarını denemekten çekinmeyin, ör. $, bazı nedenlerden dolayı C# çok seçici ... –

cevap

4

Bu işe yaramalı!

<?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

Teşekkürler, iyi çalışıyor. – swWork

+0

Aramıza hoş geldiniz :) –

+0

Cevabınızı kabul edin, gerçekten sizin için bir çözüm olsaydı :) teşekkürler. –

0

Sadece mevcut yanıtı eklemek için. Bu aslında W3C özelliklerinin .Net uygulamasında bilinen bir 'hata' dir (Connect'te here kabul edildi, ancak düzeltilemedi).

MSDN, yukarıda belirtilen geçici çözüm ile birlikte daha fazla bilgi (here) sağlar.

World Wide Web Consortium (W3C) XML şemaları Öneriler System.XML uygulanması düzenli ifadeler desen eşleştirme için RegEx sınıfını kullanır. Bazı durumlarda, W3C tarafından önerilen davranışı, RegEx sınıf davranışından farklıdır. desen eşleştirme System.XML uygulaması W3C spesifikasyonu farklı yerlerde aşağıdaki bilinen durumlar şunlardır:

XML Şema spesifikasyonu için W3C göre, dolar işareti ($) düzenli karakter olarak ele alınmalıdır . Ancak, System.Xml doğrulama, xs: deseninde satır sonu çapa olarak bir dolar işareti olarak yorumluyor. Olası geçici çözüm $ [$] ile değiştirmektir. Modeliniz [abc $] gibi parantez içinde zaten varsa, herhangi bir değişiklik yapmak için gerekli değildir.