【问题标题】:XML to SQL table (epcis:EPCISDocument)XML 到 SQL 表 (epcis:EPCISDocument)
【发布时间】:2021-10-21 12:45:13
【问题描述】:

请你帮我一下好吗?我需要对 XML 文件进行查询,但是,它有一些不同之处,因为它在 XML 文档的开头有 epcis:

所以,如果我尝试使用 epcis:dts: 进行查询,结果是:

消息 2229,第 16 层,状态 1,第 38 行。
XQuery [nodes()]:名称“epcis”不表示名称空间。

如果我尝试在没有epcis:dts: 的情况下进行查询,则结果为空白。

BEGIN
    DECLARE @archivo XML
    SET @archivo = (
        '<?xml version="1.0" encoding="utf-8"?>
            <epcis:EPCISDocument xmlns:dts="urn:dts:extension:xsd" schemaVersion="1.2" creationDate="2021-06-30T07:29:32.6511940Z"
                xmlns:epcis="urn:epcglobal:epcis:xsd:1">
                <EPCISBody>
                    <EventList>
                        <ObjectEvent>
                            <eventTime>2021-06-30T07:29:32</eventTime>
                            <eventTimeZoneOffset>+02:00</eventTimeZoneOffset>
                            <action>OBSERVE</action>
                            <bizStep>code</bizStep>
                            <dts:epcItemList>
                                <item>
                                    <epc>123456789</epc>
                                    <code>123456789zz</code>
                                </item>
                                <item>
                                    <epc>9687654321</epc>
                                    <code>9687654321zz</code>
                                </item>
                                <item>
                                    <epc>147258369</epc>
                                    <code>147258369zz</code>
                                </item>
                            </dts:epcItemList>
                        </ObjectEvent>
                    </EventList>
                </EPCISBody>
            </epcis:EPCISDocument>'
    )


    SELECT 
        patch.r.value('(epc)[1]', 'varchar(100)') as [epc],
        patch.r.value('(code)[1]', 'varchar(100)') as [code]
    FROM  
        @archivo.nodes('EPCISDocument/EPCISBody/EventList/ObjectEvent/epcItemList/item') AS patch(r)
END 
GO

我需要将信息导出为每个项目的 SQL 表,如下所示:

| epc        | code         |
| --------   | ------------ |
| 123456789  | 123456789zz  |
| 9687654321 | 9687654321zz |

enter image description here

enter image description here

非常感谢 娟

【问题讨论】:

    标签: sql sql-server xml xquery-sql


    【解决方案1】:

    您需要声明您的命名空间。 XML 中存在的命名空间别名不相关,您可以使用任何您喜欢的别名(即声明中AS 之后的位)。 p>

    另外,text().value 中使用时性能更高

    WITH XMLNAMESPACES (
      'urn:epcglobal:epcis:xsd:1' AS epcis,
      'urn:dts:extension:xsd' AS dts
    )
        SELECT 
            patch.r.value('(epc/text())[1]', 'varchar(100)') as [epc],
            patch.r.value('(code/text())[1]', 'varchar(100)') as [code]
        FROM  @archivo.nodes('epcis:EPCISDocument/EPCISBody/EventList/ObjectEvent/dts:epcItemList/item') as patch(r);
    

    SQL Fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-07
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多