Bin*_*lai 5 xml postgresql xpath element
我的 postgres 表中有这样的 XML 数据
<?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>
Run Code Online (Sandbox Code Playgroud)
使用 Xpath 查询我想选择这样的数据。
LogNumber LicenseNumber LineCode OptionNo
10000 XEU895 A 999
10000 XEU895 B 27049
10000 XEU895 C 27049
10000 XEU895 D 999
Run Code Online (Sandbox Code Playgroud)
我尝试了很多 XPath 查询,但所有查询都只提供了LineCode和OptionNo节点中的一个值。所以任何帮助表示赞赏
该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)
Run Code Online (Sandbox Code Playgroud)
在Db-fiddle中玩它。
归档时间: |
|
查看次数: |
5079 次 |
最近记录: |