首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在XML节点上迭代,然后检查是否有匹配的json值,然后选择值。

在XML节点上迭代,然后检查是否有匹配的json值,然后选择值。
EN

Stack Overflow用户
提问于 2018-10-11 01:03:34
回答 1查看 58关注 0票数 2

显然,我有一个名为Data的字段,它在这些节点中存储一些xml节点+ json。

我可以通过以下方法检索deliveryID:

代码语言:javascript
运行
复制
JSON_VALUE(ml.Data.value('(/row/value)[2]', 'NVARCHAR(MAX)'),'$.transactions[0].deliveryId') deliveryID 

但是,事务可能并不总是在它的第二个节点上,它可以在任何行上。

还有其他方法可以迭代节点并查找其中是否有json事务,然后从行中获取deliveryID吗?

谢谢

代码语言:javascript
运行
复制
<row>
  <value id="1ae95d67-599e-4ab6-9ffd-08d4d90ab608" display-name="Cardholder_id" data-type="Int32">17</value>
  <value id="1ae95d67-599e-4ab6-9ffd-08d4d90ab608" display-name="Cardholder_id" data-type="Int32">17</value>
  <value id="eb71fd46-f0b2-401d-9775-08d4d90ab608" display-name="Card_Number">3083 2614 5022 21321</value>
  <value id="4fc261b2-f776-4fd4-8e1d-08d4d90ab608" display-name="Email_Address">jello@anc.com</value>
  <value id="c867d4e5-cc0b-4ee6-b911-08d6134132e0" display-name="BP_TRIGGERS_2.0">{"transactions":[{"BP_CommsRef":"V0001","BP_Offer_Expiry":"2018-10-01T00:00:00","deliveryId":"20320925","Job_Number":"A34F443","Send_Date":"2018-09-26T00:00:00"}]}</value>
</row>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-11 10:11:40

如果我正确地理解了您,您希望在您的JSON元素中找到一个<value>,然后从那里读取deliverId

代码语言:javascript
运行
复制
Declare @XML xml = '
<row>
  <value id="1ae95d67-599e-4ab6-9ffd-08d4d90ab608" display-name="Cardholder_id" data-type="Int32">17</value>
  <value id="1ae95d67-599e-4ab6-9ffd-08d4d90ab608" display-name="Cardholder_id" data-type="Int32">17</value>
  <value id="eb71fd46-f0b2-401d-9775-08d4d90ab608" display-name="Card_Number">3083 2614 5022 21321</value>
  <value id="4fc261b2-f776-4fd4-8e1d-08d4d90ab608" display-name="Email_Address">jello@anc.com</value>
  <value id="c867d4e5-cc0b-4ee6-b911-08d6134132e0" display-name="BP_TRIGGERS_2.0">{"transactions":[{"BP_CommsRef":"V0001","BP_Offer_Expiry":"2018-10-01T00:00:00","deliveryId":"20320925","Job_Number":"A34F443","Send_Date":"2018-09-26T00:00:00"}]}</value>
</row>';

--这将检查打开的{ (您也可以搜索打开的{"transactions" )

代码语言:javascript
运行
复制
SELECT JSON_VALUE(
       @XML.query(N'/row/value[substring(text()[1],1,1)="{"]/node()')
       .value(N'text()[1]','nvarchar(max)')
       ,N'$.transactions[0].deliveryId');

-相同的方法,但是查看属性display-name

代码语言:javascript
运行
复制
SELECT JSON_VALUE(
       @XML.query(N'/row/value[@display-name="BP_TRIGGERS_2.0"]/node()')
       .value(N'text()[1]','nvarchar(max)')
       ,N'$.transactions[0].deliveryId');

简而言之:.query()<value><row>下面的XML,它填充了过滤器。拿着这个node(),从那里读.value()

这将被传递到JSON_VALUE中,以便检索所需的deliveryId

您可以对属性id进行同样的操作,还可以使用解密变量(sql:variable())或结果集(sql:column())中的列提交值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52750714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档