gpt4 book ai didi

xml - Postgresql:如何更改 XML 列中属性的值?

转载 作者:数据小太阳 更新时间:2023-10-29 02:09:03 26 4
gpt4 key购买 nike

在将其返回给客户端之前,我需要使用表中的 XML 数据类型更改存储在列中的 XML 属性的值。

现在我使用游标,获取xml,将其转换VARCHAR,解析它,< strong>更改属性值(如果不存在则添加它),将其放入临时表并从临时表返回数据。一切都在存储过程 (pl/pgsql) 中完成。

我想知道是否有更清洁的方法来做到这一点?

最佳答案

您可以使用 XML::LibXMLPL/PerlU函数(或 PL/Perl,如果您可以在 postgresql.confplperl.on_init 中预加载 XML::LibXML),如下所示:

CREATE EXTENSION IF NOT EXISTS plperlu;

CREATE OR REPLACE FUNCTION replace_attribute(
xml xml,
attr text,
val text
) RETURNS XML LANGUAGE plperlu AS $$
my ($xml, $attr, $val) = @_;
use XML::LibXML;
my $dom = XML::LibXML->load_xml(string => $xml);
for my $elem ($dom->findnodes("*[\@$attr]")) {
$elem->setAttribute($attr => $val);
}
return $dom->serialize;
$$;

然后你可以像这样使用它:

try=# SELECT replace_attribute(
'<foo id="blah">hi</foo>',
'id',
'whatever'
);
replace_attribute
-----------------------------
<foo id="whatever">hi</foo>+

findnodes() 的 XPath 表达式中有相当大的灵 active ,以防您需要更多。

关于xml - Postgresql:如何更改 XML 列中属性的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10329102/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com