XML 使用 Nodes() 方法没有结果

No result using Nodes() method for XML

我很难在使用 Nodes() 方法打开 xml 文档时得到结果。 这是我为测试而写的:

SELECT 
    @xml= CAST(XmlDoc AS XML)
FROM 
    OPENROWSET(BULK 'F:\F_3017541.XML' ,SINGLE_BLOB) AS tab(XmlDoc)

SELECT @xml;--Result 

select  
     col.value('(ShipmentNo)[1]', 'varchar(150)') as ShipmentNO ,
     col.value('(DomShipmentNo)[1]', 'varchar(150)') as DomShipmentNo
       
from @xml.nodes('/Shipment') AS tab(col)

@xml 变量将存储以下模式:

<FreightAdviceMsg Version="1.0" Sender="Test" ShippingUnit="DE">
  <Shipment DomShipmentNo="Shipno123" ShipmentNo="123456" ShippingDate="2020-08-04" >
    <Packages>
      <Package PkgNo="987654" DomPkgNo="654321" PalletType="PC" GrossWeight="3.7" Volume="0" />
    </Packages>
  </Shipment>
</FreightAdviceMsg>

我没有得到上述查询的任何结果(没有错误,只有没有结果)。

有什么我遗漏的吗?归根结底,我只想将所有货物和包裹 Infos 存储在 MSSQL table.

我是不是用错方法了?不幸的是,我过去与 xml 合作不多,因此我很高兴收到任何评论。

提前致谢:-)

你很接近!试试这个:

DECLARE @xml XML = 
'<FreightAdviceMsg Version="1.0" Sender="Test" ShippingUnit="DE">
  <Shipment DomShipmentNo="Shipno123" ShipmentNo="123456" ShippingDate="2020-08-04" >
    <Packages>
      <Package PkgNo="987654" DomPkgNo="654321" PalletType="PC" GrossWeight="3.7" Volume="0" />
    </Packages>
  </Shipment>
</FreightAdviceMsg>';

SELECT  
     col.value('@ShipmentNo', 'varchar(150)') AS ShipmentNO,
     col.value('@DomShipmentNo', 'varchar(150)') AS DomShipmentNo
FROM @xml.nodes('//FreightAdviceMsg/Shipment') AS tab(col);

Returns

+------------+---------------+
| ShipmentNO | DomShipmentNo |
+------------+---------------+
|     123456 | Shipno123     |
+------------+---------------+