Xml postgres对所有节点使用xpath,并在其中少数节点上使用函数

Xml postgres对所有节点使用xpath,并在其中少数节点上使用函数,xml,postgresql,xpath,Xml,Postgresql,Xpath,我在用postgresql编写函数时遇到了一个问题,该函数使用xml数据获取输入, 然后获取所有节点,并为以work“key”结尾的节点调用一个函数。 例如,我必须做: function readdata(data xml) RETURNS VOID AS $$ INSERT INTO data_table SELECT FROM xpath('//text()',data) xml的一些特性如下: < node1>sometext< /node1> < node

我在用postgresql编写函数时遇到了一个问题,该函数使用xml数据获取输入, 然后获取所有节点,并为以work“key”结尾的节点调用一个函数。 例如,我必须做:

function readdata(data xml) RETURNS VOID AS $$
INSERT INTO data_table SELECT FROM xpath('//text()',data)
xml的一些特性如下:

< node1>sometext< /node1>
< node2_key>anyvalue< /node2_key>
< node3_key>integer< /node3_key>
< node4>anyvalue< /node4>
但我不知道如何调用像check_val'node2',valueof node2_key这样的函数来选择数据参数

我想要达到的是:在我的选择中 在myfunction中,当节点不以单词“key”结尾时,它会给我节点的值,对于以它结尾的节点,它会给我check_val函数的结果

有没有办法用postgresql 9.1做到这一点?
如果有任何代码示例,我将不胜感激。

我不知道Postgres,但是获取名称以key结尾的所有节点元素的文本的XPath是:

获取名称不以key结尾的所有节点元素的文本的XPath是:


这不是我的意思,我想在输出中有一些东西,比如选择node1的值,检查node2的值,检查node2的值,检查node3的值,node3的值,node4的值
//*[string-length(name())>2 and substring(name(),string-length(name())-2,3)='key']/text()
//*[string-length(name())<3 or substring(name(),string-length(name())-2,3)!='key']/text()