【问题标题】:Validate xml in SQL Server在 SQL Server 中验证 xml
【发布时间】:2014-11-03 21:52:16
【问题描述】:

我有以下 xml:

<?xml version="1.0" encoding="windows-1252"?>
<!--MBS Data - Created 03/06/2014  11:40:13-->
<MBS_XML>
  <Data>
    <ItemNum>3</ItemNum>
    <SubItemNum>1</SubItemNum>
  </Data>
  <Data>
    <ItemNum>4</ItemNum>
    <SubItemNum>2</SubItemNum>
  </Data>
  <Data>
    <ItemNum>20</ItemNum>
    <SubItemNum>3</SubItemNum>
  </Data>
  <Data>
    <ItemNum>23</ItemNum>
    <SubItemNum>1</SubItemNum>
  </Data>
</MBS_XML>

我正在使用 cmd 为其生成 xsd 并在 SQL Server 中创建架构以进行验证:

CREATE XML SCHEMA COLLECTION dbo.MBS_IMPORT_SCHEMA
AS'
  <xs:schema id="MBS_XML" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="MBS_XML" msdata:IsDataSet="true" msdata:Locale="en-US">
  <xs:complexType>
  <xs:choice minOccurs="0" maxOccurs="unbounded">
  <xs:element name="Data">
  <xs:complexType>
  <xs:sequence>
  <xs:element name="ItemNum" type="xs:string" minOccurs="0" /> 
  <xs:element name="SubItemNum" type="xs:string" minOccurs="0" /> 
  </xs:sequence>
  </xs:complexType>
  </xs:element>
  </xs:choice>
  </xs:complexType>
  </xs:element>
  </xs:schema>
  ';

但是当我根据架构验证 xml 时,出现以下错误:

XML Validation: Declaration not found for element 'MBS_XML'. Location: /*:MBS_XML[1]

我在这里看到过类似的东西,但我尝试过但没有解决我的问题。有人可以帮忙吗?谢谢。

【问题讨论】:

    标签: sql-server xml validation xsd


    【解决方案1】:

    似乎在这里工作正常。我正在使用 SQL Server 2012。

    执行以下操作将根据 dbo.MBS_IMPORT_SCHEMA 验证您的 XML。确保在 XML Schema Collection 创建和 XML 验证之间有 GO 分隔符

    CREATE XML SCHEMA COLLECTION dbo.MBS_IMPORT_SCHEMA
    AS'
      <xs:schema id="MBS_XML" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
      <xs:element name="MBS_XML" msdata:IsDataSet="true" msdata:Locale="en-US">
      <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="Data">
      <xs:complexType>
      <xs:sequence>
      <xs:element name="ItemNum" type="xs:string" minOccurs="0" /> 
      <xs:element name="SubItemNum" type="xs:string" minOccurs="0" /> 
      </xs:sequence>
      </xs:complexType>
      </xs:element>
      </xs:choice>
      </xs:complexType>
      </xs:element>
      </xs:schema>
      ';
    
    GO
    
    DECLARE @x XML(dbo.MBS_IMPORT_SCHEMA)
    SELECT @x = '<?xml version="1.0" encoding="windows-1252"?>
    <!--MBS Data - Created 03/06/2014  11:40:13-->
    <MBS_XML>
      <Data>
        <ItemNum>3</ItemNum>
        <SubItemNum>1</SubItemNum>
      </Data>
      <Data>
        <ItemNum>4</ItemNum>
        <SubItemNum>2</SubItemNum>
      </Data>
      <Data>
        <ItemNum>20</ItemNum>
        <SubItemNum>3</SubItemNum>
      </Data>
      <Data>
        <ItemNum>23</ItemNum>
        <SubItemNum>1</SubItemNum>
      </Data>
    </MBS_XML>'
    

    【讨论】:

    • 这很快。你是对的。我验证了错误的模式名称!非常感谢您为我验证。
    猜你喜欢
    • 2012-09-25
    • 2011-12-21
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多