2012-02-14 9 views
5

Tengo un problema con la validación de C# XDocument XSD.

El siguiente archivo se valida así por XML Spy, pero no por .Net (C#)

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

esquema

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

una idea?

+2

¿Esto se beneficiaría de una etiqueta C#? – sbi

+0

Este es un error en el C#, para el cual hay una solución: use [$]. No te molestes en probar cosas como referencias de personajes, p. $, por alguna razón C# es muy exigente aquí ... –

Respuesta

4

¡Esto debería funcionar!

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

Gracias, está funcionando bien. – swWork

+0

De nada :) –

+0

Acepte la respuesta, si realmente fue una solución para usted :) gracias. –

0

Solo para completar la respuesta existente. Esto es en realidad un 'error' conocido en la implementación .Net de las especificaciones W3C (here reconocido en Connect, pero No se solucionará).

MSDN proporciona más información (here), junto con la solución anterior mencionada.

La aplicación System.XML de la World Wide Web Consortium (W3C) Recomendaciones para esquemas XML utiliza la clase RegEx para realizar coincidencia de patrones de expresiones regulares. En algunos casos, el comportamiento recomendado por W3C difiere del comportamiento de la clase RegEx. El siguientes son los casos conocidos en los que la aplicación de System.XML concordancia con el modelo difiere de la especificación del W3C:

Según el W3C para la especificación XML Schema, el signo de dólar ($) debe ser tratado como un personaje regular . Sin embargo, la validación de System.Xml interpreta un signo de dólar en el patrón xs: como un ancla de final de línea . La posible solución alternativa es reemplazar $ con [$]. Si su patrón ya está entre corchetes, como [abc $], no es necesario para realizar cambios.

Cuestiones relacionadas