2012-02-14 4 views
5

Mam problem z walidacją X X X X X XDD.

Następujący plik jest potwierdzone również przez XML Spy, ale nie przez .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> 

pomysł?

+2

Czy ta korzyść pochodzi z tagu C#? – sbi

+0

To jest błąd w C#, dla którego istnieje obejście: użyj [$]. Nie przejmuj się próbami takich odniesień do znaków, np. $, z jakiegoś powodu C# jest bardzo wybredne tutaj ... –

Odpowiedz

4

To powinno zadziałać!

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

Dzięki, działa dobrze. – swWork

+0

Serdecznie zapraszamy :) –

+0

Zaakceptuj odpowiedź, jeśli to było naprawdę rozwiązanie dla Ciebie :) dzięki. –

0

Wystarczy, aby dodać do istniejącej odpowiedzi. Jest to właściwie znany błąd w implementacji .Net specyfikacji W3C (potwierdzony here dla Connect, ale Nie naprawi on).

Usługa MSDN zapewnia więcej informacji (here) wraz z obejściem wymienionym powyżej.

Realizacja System.Xml World Wide Web Consortium (W3C) Rekomendacje dla schematów XML używa klasy REGEX wykonać wzorzec dopasowania wyrażeń regularnych. W niektórych przypadkach zalecane przez W3C zachowanie różni się od zachowania klasy RegEx. następujący są znane przypadki, w których realizacja System.Xml z dopasowywania wzoru różni się od specyfikacji W3C:

Według specyfikacji W3C dla XML Schema, znak dolara ($) powinien być traktowany jako zwykły znak . Jednak walidacja System.Xml interpretuje znak dolara w wzorze xs: jako kotwicę końca wiersza . Możliwym rozwiązaniem jest zastąpienie $ z [$]. Jeśli wzór jest już w nawiasach, na przykład [abc $], nie jest konieczne wprowadzanie jakichkolwiek zmian.

Powiązane problemy