SQL Server - XML 验证:无效的简单类型值

Joh*_*oDo 5 .net xml sql sql-server xsd

我试图根据 SQL Server 2005 中的 XML 架构验证 XML 输入,但在验证电子邮件时出现错误:

消息 6926,16 级,状态 1,第 4 行

XML 验证:无效的简单类型值:“john_doe@yahoo.com”。位置: / :xxx[1]/ :yyy[1]/*:电子邮件[1]

电子邮件字段在架构中定义为:

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

每个与正则表达式匹配的电子邮件地址都被视为有效,但其中包含下划线的地址除外(johnDoe@yahoo.com可以,john.doe@yahoo.com可以,但john_doe@yahoo.com不行)。

如果我删除下划线,XML 就会被验证。

我已经使用各种工具测试了我的正则表达式(您可以在 MSDN 上找到用于验证电子邮件的正则表达式),他们都说它是有效的。但不是 SQL Server。

为什么它不验证下划线?我必须在 SQL Server 中做一些特别的事情吗?

Mik*_*son 3

找到了有关该问题的链接以及解决方法。http://www.agilior.pt/blogs/rodrigo.guerreiro/archive/2008/11/14/5965.aspx

显然\w应该包含下划线并且这样做,除非涉及到处理 XSD 模式。所以这不是特定的 SQL Server 问题。使用 XMLSpy 验证 XML 时,我有完全相同的行为。