Postgres OpenXML

时间:2015-10-07 15:02:55

标签: sql-server postgresql xpath

要启动此功能:是的,我已阅读this post有关OpenXML和postgres的内容。

  1. 6年后仍然如此吗?

  2. 如果是这样,我的公司正在从MS SQL Server转换为Postgres,有很多存储过程,其中许多都依赖于OpenXML。为每个可能希望从我们的XML中检索的东西写出xpath()似乎相当麻烦。你有什么建议去转换吗?我还没有看到xpath()更好的替代方案呢?

  3. 谢谢!

2 个答案:

答案 0 :(得分:2)

经过大量研究后:

1)是的,它似乎是这样。

2)是的,这是一种痛苦,制作了一个内部程序,它抓住了潜在的XML路径并为我们创建了一个脚本,只需要手工调整一些。

由于

答案 1 :(得分:1)

PostgreSQL 中的模拟 OPENXML(希望 xmltable 按照它们在输入 xml 中出现的顺序查看节点):

    CREATE OR REPLACE FUNCTION openxml (
      p_xml xml
    )
    RETURNS TABLE (
      id integer,
      parent_id integer,
      element_name text,
      element_data text
    ) AS
    $body$
    DECLARE
    BEGIN
      return query
      with t as (SELECT *
                 from xmltable('//*' 
                               passing p_xml           
                               columns 
                                 id for ORDINALITY,
                                 element_name text path 'local-name()',
                                 parent_name text path 'local-name(..)',
                                 element_data text path 'text()[1]'
                               ))
      select t.id, 
            (select max(t1.id) from t t1 where t1.id<t.id and t.parent_name=t1.element_name)as parent_id, 
            t.element_name, 
            t.element_data
      from t;                                  

END;
$body$
LANGUAGE 'plpgsql';