首页 > 解决方案 > T-SQL 的 OPENXML 不适用于具有元数据的根节点

问题描述

我正在尝试阅读 XML 文档。XML 的根节点有一些元数据,因为我没有得到任何记录。如果我删除该元数据,它工作正常。有什么方法可以忽略该元数据并仍然从 XML 中检索数据。

DECLARE @myDoc XML,
        @idoc INT;
SET @myDoc
    = '<Leads xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/RACLeadXMLSchema.xsd">
  <LeadElement>
    <FirstName>abc</FirstName>
    <LastName>pqr</LastName>
    <Email>abc@gmail.com</Email>
    <PhoneNumber>1234567890</PhoneNumber>
    </LeadElement>
</Leads>';

EXEC sp_xml_preparedocument @idoc OUTPUT, @myDoc;

SELECT FirstName,
       LastName,
       Email,
       PhoneNumber
FROM
    OPENXML(@idoc, 'Leads/LeadElement')
    WITH
    (
        FirstName VARCHAR(100) 'FirstName',
        LastName VARCHAR(100) 'LastName',
        Email VARCHAR(100) 'Email',
        PhoneNumber VARCHAR(100) 'PhoneNumber'
    );

标签: sql-serverxmltsql

解决方案


问题在于 Leads 元素中的最后一个命名空间声明。

xmlns="http://tempuri.org/RACLeadXMLSchema.xsd"

之后应该有一些变量xmlns。试试下面的东西。

xmlns:xsk="http://tempuri.org/RACLeadXMLSchema.xsd"


推荐阅读