使用XPath从Postgres XML列中提取数据 [英] Extract data from a Postgres XML column using XPath

查看:147
本文介绍了使用XPath从Postgres XML列中提取数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的postgres表中有这样的XML数据

I have an XML data like this in my postgres table

<?xml version="1.0" encoding="UTF-8"?>
<Mydata>
   <LogNumber>10000</LogNumber>
   <LicenseNumber>XEU895</LicenseNumber>
   <LineCode>
      <V Idx="1">A</V>
      <V Idx="2">B</V>
      <V Idx="3">C</V>
      <V Idx="4">D</V>
   </LineCode>
   <OptionNo>
      <V Idx="1">999</V>
      <V Idx="2">27049</V>
      <V Idx="3">27049</V>
      <V Idx="4">999</V>
   </OptionNo>
</Mydata>


使用Xpath查询,我想选择这样的数据。

Using Xpath query I want to select the data like this.

LogNumber   LicenseNumber   LineCode    OptionNo
10000         XEU895            A           999
10000         XEU895            B           27049
10000         XEU895            C           27049
10000         XEU895            D           999

我尝试了很多XPath查询,但是所有查询都只给我一个值在 LineCode OptionNo 节点中。因此,感谢任何帮助

I have tried so many XPath queries, but all are giving me only one value from the LineCode and OptionNo node. So any help appreciated

推荐答案

xpath() 函数返回一个XML值数组。使用 unnest() 获取由函数返回的数组元素,该数组应用于第一个参数 xpath 指向的节点:

with t(x) as ( 
values (
    '<?xml version="1.0" encoding="UTF-8"?>
    <Mydata>
       <LogNumber>10000</LogNumber>
       <LicenseNumber>XEU895</LicenseNumber>
       <LineCode>
          <V Idx="1">A</V>
          <V Idx="2">B</V>
          <V Idx="3">C</V>
          <V Idx="4">D</V>
       </LineCode>
       <OptionNo>
          <V Idx="1">999</V>
          <V Idx="2">27049</V>
          <V Idx="3">27049</V>
          <V Idx="4">999</V>
       </OptionNo>
    </Mydata>'::xml)
)

select 
    (xpath('./LogNumber/text()', x))[1] as "LogNumber",
    (xpath('./LicenseNumber/text()', x))[1] as "LicenseNumber",
    unnest(xpath('./LineCode/V/text()', x)) as "LineCode",
    unnest(xpath('./OptionNo/V/text()', x)) as "OptionNo"
from t

 LogNumber | LicenseNumber | LineCode | OptionNo 
-----------+---------------+----------+----------
 10000     | XEU895        | A        | 999
 10000     | XEU895        | B        | 27049
 10000     | XEU895        | C        | 27049
 10000     | XEU895        | D        | 999
(4 rows)

Db小提琴。

这篇关于使用XPath从Postgres XML列中提取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆