在 PostgreSQL 中动态处理 XML 属性

Handling XML Attribute in dynamically in PostgreSQL

我需要从 XML 中读取属性。下面是一个示例 xml

<users userid="79132e61-df0a-4af5-95db-92d8bb492c84" username="test" birthdate="2000-03-10" nationality="USA"/>

我正在使用下面的代码从这个 XML.

中读取属性
with cte (xmlcontent) as 
(

select '<users userid="79132e61-df0a-4af5-95db-92d8bb492c84" username="test" birthdate="2000-03-10" nationality="USA"/>'::xml )
select  Unnest(xpath('//@userid',XMLCONTENT))::text::uuid,
        Unnest(xpath('//@username',XMLCONTENT))::text,
        Unnest(xpath('//@nationality',XMLCONTENT))::text
from cte;

问题是,nationality 不是此 xml 的强制属性。当 XML.

中不存在 nationality 时,我的查询不会产生任何结果

如何修改我的查询来处理这种情况?

我找到的一个解决方案是使用 XMLEXISTS.

下面的查询对我来说绝对没问题

with cte (xmlcontent) as 
    (
    
    select '<users userid="79132e61-df0a-4af5-95db-92d8bb492c84" username="test" birthdate="2000-03-10" nationality="USA"/>'::xml )
    select  Unnest(xpath('//@userid',XMLCONTENT))::text::uuid,
            Unnest(xpath('//@username',XMLCONTENT))::text,
            case when xmlexists('//@nationality' passing  XMLCONTENT) then Unnest(xpath('//@nationality',XMLCONTENT))::text else null end 
    from cte