【问题标题】:I need a SQL query to fetch last attribute value from an XML element我需要一个 SQL 查询来从 XML 元素中获取最后一个属性值
【发布时间】:2016-07-05 13:02:11
【问题描述】:

我需要一个 SQL 查询来从 XML 元素中获取最后一个属性值。我有如下所示的 XML。我需要从 legalNames/Name Path 获取 Name 值,即“Current State Contracting”。对此的任何帮助表示赞赏..

<legalNames id="l5922F64208E14D97BEE4C2E94B670146" deleted="0">
  <operatingNames id="o370FA0A9EAE54290B132211A1EB28D8D" deleted="0">
    <Name>CSR Contracting</Name>
  </operatingNames>
  <Name prior="" id="N45BF84B89B4F4DB987C07EF568E585D9">Current State Contracting</Name>
</legalNames>

【问题讨论】:

  • 我的回答有点快,因为您没有说明您使用的是哪个 RDBMS。请用适当的产品和版本标记您的问题!

标签: xml-parsing sqlxml


【解决方案1】:

试试这样(SQL-Server 语法):

DECLARE @xml XML=
'<legalNames id="l5922F64208E14D97BEE4C2E94B670146" deleted="0">
  <operatingNames id="o370FA0A9EAE54290B132211A1EB28D8D" deleted="0">
    <Name>CSR Contracting</Name>
  </operatingNames>
  <Name prior="" id="N45BF84B89B4F4DB987C07EF568E585D9">Current State Contracting</Name>
</legalNames>';

select @xml.value('(/legalNames/Name)[1]','nvarchar(max)')

【讨论】:

  • 感谢小牛的回复。
【解决方案2】:

抱歉延迟响应,我实际上找到了解决方案。 使用 (.) 而不是 column 将解决这样的问题 ('(.)[1]', 'varchar(500)')。下面是我从 LegalNames/Name 路径中获取所有值的确切代码。

SELECT HistoryID,
    x.r.value('(@id)[1]', 'varchar(500)') AS  NameID,
    x.r.value('(@prior)[1]', 'varchar(500)') AS  Name_prior,
    x.r.value('(.)[1]', 'varchar(500)') AS  Name    
From 
    (select  HistoryID,XMLData
     FROM [Compass Source_Test].dbo.Temp_History_table_july11) s 
     CROSS apply  s.XMLData.nodes('legalNames/Name') as  x(r)

【讨论】:

  • 嗨,很高兴您自己找到了解决方案!但请允许我一个提示:对于任何试图为相关问题找到解决方案的人来说,这个答案绝对没有帮助。您的 ('(.)[1]', 'varchar(500)') 将选择 当前节点的第一次出现,这相当 - 呃 - 毫无意义...尝试包含一个最小的工作示例(您可以从我的回答中复制)来演示您的解决方案请使用您正在使用的 RDBMS 标记您的问题。编码愉快!
  • 再次您好,感谢您添加代码!为了帮助您解决未来的问题:在您的问题中,您没有说明这是来自表格 - 有很大的不同。您使用.nodes() 的方法导航到使您可以调用.value() 的实际元素。这仅在您想从同一位置获取多个值时才有意义。再说一次您在问题中没有说明的事情。您的回答实际上涵盖了一个不同的问题......顺便说一句:您的代码也应该在没有()[1] 的情况下工作。编码愉快!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 2017-08-17
  • 2018-10-20
  • 2020-10-13
相关资源
最近更新 更多