2012-02-14 14 views
5

Ho un problema con convalida X # XDocument C#.

Il seguente file viene convalidato bene da XML Spy, ma non da .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> 

Un'idea?

+2

Questo vantaggio potrebbe derivare da un tag C#? – sbi

+0

Questo è un bug nel C#, per il quale esiste una soluzione alternativa: utilizzare [$]. Non preoccuparti di provare cose come riferimenti di carattere, ad es. $, per qualche motivo C# è molto schizzinoso qui ... –

risposta

4

Questo dovrebbe funzionare!

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

Grazie, sta funzionando bene. – swWork

+0

Siete i benvenuti :) –

+0

Si prega di accettare la risposta, se fosse davvero una soluzione per voi :) grazie. –

0

Solo per aggiungere alla risposta esistente. Questo è in realtà un "bug" noto nell'implementazione .Net delle specifiche W3C (riconosciuto here su Connect, ma non risolverà).

MSDN fornisce ulteriori informazioni (here), insieme con la soluzione descritta in precedenza.

L'implementazione System.Xml del World Wide Web Consortium (W3C) Raccomandazioni per gli schemi XML utilizza la classe RegEx per eseguire pattern matching di espressioni regolari. In alcuni casi, il comportamento raccomandato da W3C differisce dal comportamento della classe RegEx. Il seguito sono riportati i casi noti in cui l'attuazione di System.Xml pattern matching si differenzia dalla specifica W3C:

Secondo il W3C per la specifica XML Schema, il simbolo del dollaro ($) deve essere trattato come un personaggio regolare . Tuttavia, la convalida System.Xml interpreta un segno di dollaro nel modello xs: come un ancoraggio di fine riga . La soluzione possibile è sostituire $ con [$]. Se il modello è già tra parentesi, ad esempio [abc $], non è necessario per apportare modifiche.

Problemi correlati