如何使用ORACLE SQL从XML分别提取可重复的json节点值? [英] How to extract repeatable json node values separately from XML using ORACLE SQL?
本文介绍了如何使用ORACLE SQL从XML分别提取可重复的json节点值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下XML,我想分别提取json参数"serviceNumber"的值 我尝试使用EXTRACT函数,但是将结果串联在一起,但我希望将它们分开.
I have the following XML and i want to extract the values of json parameter "serviceNumber" separately i tried using EXTRACT function but i got the results concatenated but i want them separated.
<Input>
<Header>
<User-Agent></User-Agent>
<Accepted-Language></Accepted-Language>
<Authorization></Authorization>
<Date>Mon, 27 Feb 2017 21:39:55 GMT</Date>
<Username></Username>
<Test />
<UserInfo />
<msisdn />
<imsi />
<X-Forwarded-For></X-Forwarded-For>
<x-Client-IP></x-Client-IP>
<Location />
</Header>
<URI></URI>
<ServiceName></ServiceName>
<PrimaryKey></PrimaryKey>
<Parameters>
<Parameter1></Parameter1>
<Parameter2 />
<Parameter3 />
</Parameters>
<Body>
<json:object xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.datapower.com/schemas/json jsonx.xsd">
<json:string name="transactionType"></json:string>
<json:array name="payments">
<json:object>
<json:string name="amount"></json:string>
<json:string name="serviceNumber">536888669</json:string>
<json:string name="serviceType"></json:string>
<json:string name="accountNumber"></json:string>
</json:object>
<json:object>
<json:string name="amount"></json:string>
<json:string name="serviceNumber">535394441</json:string>
<json:string name="serviceType"></json:string>
<json:string name="accountNumber"></json:string>
</json:object>
<json:object>
<json:string name="amount"></json:string>
<json:string name="serviceNumber">138422262</json:string>
<json:string name="serviceType"></json:string>
<json:string name="accountNumber"></json:string>
</json:object>
<json:object>
<json:string name="amount"></json:string>
<json:string name="serviceNumber">505809543</json:string>
<json:string name="serviceType"></json:string>
<json:string name="accountNumber"></json:string>
</json:object>
<json:object>
<json:string name="amount"></json:string>
<json:string name="serviceNumber">138422338</json:string>
<json:string name="serviceType"></json:string>
<json:string name="accountNumber"></json:string>
</json:object>
</json:array>
</json:object>
</Body>
</Input>
我想要类似的输出
serviceNumber
-------------
536888669
535394441
138422262
505809543
138422338
推荐答案
使用XMLTABLE
:
SELECT x.serviceNumber
FROM your_table t
CROSS JOIN
XMLTABLE(
XMLNAMESPACE( 'http://www.yourserver.url/json/' AS "json" ),
'//root/Input/Body/json:object/json:array/json:object/'
PASSING XMLTYPE(
'<?xml version="1.0" encoding="utf-8"?>' ||
'<root xmlns:json="http://www.yourserver.url/json/">' ||
t.your_xml_column ||
'</root>'
)
COLUMNS serviceNumber NUMBER PATH './json:string[@name="serviceNumber"]'
) x
这篇关于如何使用ORACLE SQL从XML分别提取可重复的json节点值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文