syn*_*tic 5 xml postgresql plpgsql
在SQL Server 2005的T-SQL语言中,我可以通过以下方式粉碎XML值:
SELECT
t.c.value('./ID[1]', 'INT'),
t.c.value('./Name[1]', 'VARCHAR(50)')
FROM @Xml.nodes('/Customer') AS t(c)
Run Code Online (Sandbox Code Playgroud)
其中@Xml是一个类似的xml值
'<Customer><ID>23</ID><Name>Google</Name></Customer>'
Run Code Online (Sandbox Code Playgroud)
有人可以帮我在PostgreSQL中实现相同的结果(可能在PL/pgSQL中)吗?
Sco*_*ley 10
该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
Run Code Online (Sandbox Code Playgroud)
你unnest(xpath(...))用来将一大块xml打成行大小的叮咬; 并xpath()提取个人价值观.从XML阵列提取第一值,铸造text,然后浇铸到int(或date,numeric等)是不是真的舒服.我在博客上有一些辅助函数可以使这更容易,请参阅Postgres中的XML解析
使用PostgreSQL中的xpath-function处理XML.
编辑:示例:
SELECT
xpath('/Customer/ID[1]/text()', content),
xpath('/Customer/Name[1]/text()', content),
*
FROM
(SELECT '<Customer><ID>23</ID><Name>Google</Name></Customer>'::xml AS content) AS sub;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7716 次 |
| 最近记录: |