[英]How to get name of an element using xpath in Postgres
我试过这个
select xpath('name()', unnest(xpath('/foo/*', '<foo><bar>test</bar><zar>test1</zar></foo>')));
正如此处其他问题中所建议的那样,但我只得到两个空行作为响应。
另外我试过
select unnest(xpath('name(/foo/*)', '<foo><bar>test</bar><zar>test1</zar></foo>'));
但它只返回一行响应为bar
。
无论如何我可以让查询返回两行结果bar
, zar
使用 Xpath 吗?
如果输出应该是行,我发现xmltable()
更容易使用:
with data (content) as (
values ('<foo><bar>test</bar><zar>test1</zar></foo>'::xml)
)
select x.*
from data
cross join xmltable('/foo/*' passing content
columns
item text path 'name()',
value text path '.') as x
输出是:
item | value
-----+------
bar | test
zar | test1
使用 xpath 函数text()
提取元素的内容:
SELECT unnest(xpath('/foo/*/text()','<foo><bar>test</bar><zar>test1</zar></foo>'));
unnest
--------
test
test1
(2 Zeilen)
要列出元素名称,请使用子查询/CTE 或使用两个unnest()
,例如
SELECT
unnest(xpath('local-name(./*)',
unnest(xpath('/foo/node()', '<foo><bar>test</bar><zar>test1</zar></foo>'))));
unnest
--------
bar
zar
(2 Zeilen)
您可以使用name()
函数来提取标签名称:
select xpath('name(/*)', x)
FROM unnest(
xpath(
'/foo/*',
'<foo><bar>test</bar><zar>test1</zar></foo>'
)
) AS xml(x);
xpath
═══════
{bar}
{zar}
(2 rows)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.