【问题标题】:Can I Import XML into a Postgres Database without an ORM?我可以在没有 ORM 的情况下将 XML 导入 Postgres 数据库吗?
【发布时间】:2012-05-28 06:55:10
【问题描述】:

我需要能够从/向 PostgresQL 数据库导出/导入 XML 数据。我查看了documentation,并确定我可以使用查询或表轻松导出 XML。将相同的 XML 重新导入同一个数据库的最简单方法是什么?我不喜欢使用第三方工具,但会处理 PG 函数和 Java/JDBC 中的任何编程。

我会投票给任何提供有用信息的人。

【问题讨论】:

标签: java xml postgresql jdbc xml-parsing


【解决方案1】:

创建一个“临时”表,其中包含您要导入的每个 XML 的一行。

然后使用 XML 函数(例如 xpath_table)将该 XML 列分割成行和列。像这样的:

-- make sure xpath_table is available
create extension xml2;

-- create XML staging table
create table xml_test (id integer, xml text);

-- create sample XML document
insert into xml_test  (id, data)
values
(1, '<person-list>
    <person>
        <id>42</id>
        <firstname>Arthur</firstname>
        <lastname>Dent</lastname>
    </person>
    <person>
        <id>43</id>
        <firstname>Zaphod</firstname>
        <lastname>Beeblebrox</lastname>
    </person>
</person-list>'
);

现在,如果您的目标表是例如:

create table person 
(
   id integer not null primary key,
   firstname text,
   lastname text
);

你可以使用:

insert into person (id, firstname, lastname)
select person_id, firstname, lastname
from xpath_table('id', 'xml', 'xml_test', 
                 '/person-list/person/id|/person-list/person/firstname|/person-list/person/lastname', 'id=1')
as t (docid integer, person_id integer, firstname text, lastname text)

函数id=1 的最后一个参数是从包含XML 列的表中选择的行。如果那里有多个文档,则需要选择与 xpath 表达式匹配的文档

您也可以使用核心 XML 函数创建一个没有 xml2 模块的类似视图。请参阅 user272735 在 cmets 中发布的链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 2015-11-27
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多