本文介绍了使用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
推荐答案
函数返回一个XML值数组。使用获取由函数返回的数组元素,该数组应用于第一个参数 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)
在
这篇关于使用XPath从Postgres XML列中提取数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!