该xpath
函数将返回一个节点数组,以便您可以提取多个伙伴。通常,您会执行以下操作:
SELECT (xpath('/Customer/ID/text()', node))[1]::text::int AS id,
(xpath('/Customer/Name/text()', node))[1]::text AS name,
(xpath('/Customer/Partners/ID/text()', node))::_text AS partners
FROM unnest(xpath('/Customers/Customer',
'<Customers><Customer><ID>23</ID><Name>Google</Name>
<Partners><ID>120</ID><ID>243</ID><ID>245</ID></Partners>
</Customer>
<Customer><ID>24</ID><Name>HP</Name><Partners><ID>44</ID></Partners></Customer>
<Customer><ID>25</ID><Name>IBM</Name></Customer></Customers>'::xml
)) node
您用来unnest(xpath(...))
将一大块 xml 分成行大小的小块的地方;并xpath()
提取单个值。从 XML 数组中提取第一个值、转换为text
然后转换为int
(或date
等numeric
)并不是很舒服。我的博客上有一些辅助函数可以让这更容易,请参阅Postgres 中的 XML 解析