【问题标题】:Get value from node in XML - position从 XML 中的节点获取值 - 位置
【发布时间】:2021-09-04 23:18:50
【问题描述】:

我有一个要在 SQL 中解析的 XML 文档。您可以在下面找到部分文档

MyXML

我正在使用标准查询,但我不知道如何提取附加图片中带下划线的值@ID。如下查询:

DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)

SELECT @XML = XMLData FROM XMLData

EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

SELECT 

[RID]

FROM 

OPENXML(@hDoc, 'OTA_HotelPmsInfoNotif/HotelReservations/HotelReservation')

WITH 
(
[RID]                           varchar(5)      '../../POS/Source/RequestorID/@ID[2]'
) --this part need an update

EXEC sp_xml_removedocument @hDoc
GO

非常感谢您对此的帮助。

问候

【问题讨论】:

  • 发布 XML,而不是以图形方式显示它的工具的屏幕截图。
  • 感谢您的评论。我无法发布 XML,因为它包含敏感数据。
  • ...嗯?然后删除/编辑敏感数据。
  • 您可以混淆您的 XML。

标签: sql sql-server xml


【解决方案1】:

我以某种方式做到了。也许有人会使用它:

DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)

SELECT @XML = XMLData FROM XMLData

EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML

SELECT 

[RID]

FROM 

OPENXML(@hDoc, 'OTA_HotelPmsInfoNotif/HotelReservations/HotelReservation')

WITH 
(
[RID]                           varchar(5)      
'../../POS/Source[2]/RequestorID/@ID'
) --[2] should be here with SOURCE node as it has 2 rows - not with @ID. 

EXEC sp_xml_removedocument @hDoc
GO

【讨论】:

  • ...现在告诉我,任何人都可以通过查看您的屏幕截图猜出正确的 XPath。屏幕截图中没有足够的信息。更不用说在发布之前没有人可以从您的问题中复制有效的 XML 来实际测试他们的答案。
  • 从 SQL Server 2005 开始,最好使用基于 w3c 标准的 XQuery 语言,同时处理 XML 数据类型。保留 Microsoft 专有的OPENXML 及其伙伴sp_xml_preparedocumentsp_xml_removedocument 只是为了与过时的SQL Server 2000 向后兼容。它们的使用已减少到极少数的边缘情况。强烈建议重写您的 SQL 并将其切换到 XQuery。
猜你喜欢
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
相关资源
最近更新 更多