当前位置: 首页 > 面试题库 >

如何使用ORACLE SQL从XML分别提取可重复的json节点值?

匡玉堂
2023-03-14
问题内容

我有以下的XML和我想提取JSON参数“serviceNumber”的价值观 分开
我尝试使用EXTRACT功能,但我得到的结果连接起来,但我希望他们分开。

<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


 类似资料:
  • 我有以下数据结构(原始数据结构为2.5gb,因此必须进行解析): 我想提取所有值及其相应的值。最后,我计划有一个带有一列personId和一列income的df(income将是重复的)。因此,棘手的部分不仅是名称空间,还包括如何在不同的节点级别访问XML。 到目前为止,我的方法无法做到这一点。 非常感谢您的帮助。

  • 问题内容: 我以前从未真正使用过DOM解析器,现在有一个问题。 我将如何从该标记中提取URL: 问题答案: 使用simpleXML: 输出:

  • 我有一个具有以下模式的Spark数据帧。 我想将其转换为另一个具有以下模式的DF 我已经编写了以下代码,但它不编译,并抱怨编码错误。 请建议正确的方法。

  • 问题内容: 我有一个看起来像这样的xml: 在这里,我想检索类型为属性的“源类型”的值。 我曾这样尝试过,但无法正常工作: 我也尝试过这个: 请帮助我!! 在此先感谢Varsha。 问题答案: 由于您的问题较为笼统,请尝试使用Java中提供的XML解析器来实现。如果您特定于解析器,请在此处更新您尝试过的代码

  • 我目前正在为我的不和谐机器人做一个计算器功能。我做了一个获取steam市场项目价格的命令,然后根据公式进行计算:([price]-[price*0.15])*案例数量,其中0.15是市场费用。问题就出在这里了。程序将json.lowest_price看作一个单词,而不是数字(我认为)。结果,bot发送消息“nan”。我不知道如何使我的代码正确地将json thingy视为一个数字。请帮助<3。这是

  • 我正在以JSON字符串的形式从数据库中获取数据: 如何从给定的JSON字符串中提取公司名称?