将值附加到XML SELECT结果

时间:2018-08-20 13:52:19

标签: xml postgresql

我正在尝试从表中获取XML并将XML元素附加到该表。我不想物理更新数据库中的XML。只需修改SELECT结果。

假设我们有一个带有该blob的XML字段,

<Test>
   <ID>1</ID>
   <Name>test123</Name>
</Test>

,我们要为此添加一个Type元素

<Test>
   <ID>1</ID>
   <Name>test123</Name>
   <Type>Employee</Type>
</Test>

我们如何使用postgres XML函数实现这一目标? XML函数here的postgres文档似乎没有add_child方法。实际上,与字符串不同,postgres提供了很少的XML方法。我没有找到任何方法来使用SQL查询来修改XML数据,而不必从数据库中获取它们,在应用程序中对其进行修改以及使用修改后的条目更新表。尽管我的用例不需要我修改数据库中的数据,但我想将任何此类功能与SELECT查询一起使用以实现我的用例。有没有一种方法可以通过单个查询来实现?

1 个答案:

答案 0 :(得分:1)

也许这不是最好的方法,但是它将满足您的要求:

SELECT 
    '<Test>' ||
    xmlconcat(
        xmlagg(parts),
        xmlelement(name "Type", null, 'Employee')
    ) ||
    '</Test>'
FROM
    unnest(
        xpath('/Test/*', '<Test><ID>1</ID><Name>test123</Name></Test>')
    ) AS parts;

首先,它使用Test函数获取xpath()元素的所有子元素。然后将这些部分聚合并与新的Type元素连接。最后,再次添加根元素Test