2011-10-03 2 views
4

Je suis en train de valider une entrée XML par rapport à un schéma XML dans SQL Server 2005 et je reçois une erreur lors de la validation de l'e-mail:SQL Server - Validation XML: Valeur de type simple non valide

Msg 6926 , Niveau 16, État 1, Ligne 4

Validation XML: valeur de type simple non valide: '[email protected]'. Lieu:/: xxx [1]/: yyy [1]/*: Email [1]

Le champ email est défini dans le schéma comme:

<xsd:simpleType name="EMailType"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:pattern value="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" /> 
    </xsd:restriction> 
    </xsd:simpleType> 

Chaque adresse e-mail correspond à l'expression rationnelle est considéré comme valide, sauf pour quelque chose avec des traits de soulignement ([email protected] est OK, [email protected] est OK, mais [email protected] ne l'est pas).

Si je supprime le trait de soulignement, le XML est validé.

J'ai testé mon expression rationnelle (qui est celle que vous pouvez trouver sur MSDN pour la validation des emails) avec divers outils et tous disent que c'est valide. Mais pas SQL Server.

Pourquoi ne valide-t-il pas les traits de soulignement? Y a-t-il quelque chose de spécial que je dois faire dans SQL Server?

+0

Même problème: http://stackoverflow.com/questions/2973052/underscore-not-accepting-in-xml-schema-for-email-address – Asken

+0

@Asken: ce poste traite une expression rationnelle non valide. Mon regexp est valide, SQL Server refuse de valider quelque chose avec des underscores dedans (d'après ce que j'ai pu trouver il a quelque chose à voir avec l'injection SQL puisque _ est un caractère générique de recherche) – JohnDoDo

+0

Désolé c'est une question bête mais votre motif regexp ne permet pas de '_' droit? Au moins c'est le comportement en utilisant cela dans XMLSpy. Donc le message d'erreur de SQL Server est attendu parce que '_' n'est pas autorisé ou est-ce que je manque quelque chose? –

Répondre

2

Trouvé un lien sur le problème avec une solution de contournement. http://www.agilior.pt/blogs/rodrigo.guerreiro/archive/2008/11/14/5965.aspx

Apparemment, \w devrait inclure le trait de soulignement, sauf lorsqu'il s'agit de manipuler des schémas XSD. Ce n'est donc pas un problème SQL Server spécifique. J'ai exactement le même comportement lors de la validation d'un XML en utilisant XMLSpy.

+0

le lien est un lien mort :( – Spence

+0

@Spence le lien est fixe. –

Questions connexes