繁体   English   中英

如何在 Postgres 中使用 xpath 获取元素的名称

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM