Создать XML из PostgreSQL? - PullRequest
       6

Создать XML из PostgreSQL?

0 голосов
/ 11 февраля 2011

Как я могу создать файл XML из PostgreSQL?

Ответы [ 4 ]

6 голосов
/ 26 января 2012

Допустим, вам нужно создать следующий тип XML

<Agents>
<agent id="32"/>
<agent id="33"/>
<agent id="34"/>
</Agents>

Затем просто выполните следующий запрос;

SELECT
    XMLFOREST(tb1."xml-val" AS "Agents")
FROM
    (
        SELECT
            XMLAGG(XMLELEMENT(NAME agent ,XMLATTRIBUTES(t.id AS id))) AS 
            "xml-val"
        FROM
            test t
    ) AS tb1;

:)

3 голосов
/ 11 февраля 2011
1 голос
/ 01 мая 2012

Вот хранимая процедура (называемая функцией в PostgresSQL), которая возвращает XML из простого запроса.

CREATE OR REPLACE FUNCTION getXml()
  RETURNS xml 
  AS
$BODY$
DECLARE myXml xml;
BEGIN 
    SELECT * INTO myXml FROM query_to_xml_and_xmlschema('SELECT id FROM someTable', true, true, 'myProject.mySchema');
    RETURN myXml;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION getXml() OWNER TO postgres;

Вызов функции с помощью оператора select:

SELECT getXml();

Функциявернет схему в нотации схемы XSD, а ваши данные в XML будут отображены как «лес XML».

0 голосов
/ 26 августа 2018

Это мой точный пример вопроса.

CREATE TABLE xml_mobile_data AS SELECT
xml $$
    <rows>
        <row id="1">
            <model>Samsung Galaxy Note 9</model>
            <price>$3,000.00</price>
        </row>
        <row id="2">
            <model>iPhone X</model>
            <price>$1,000.00</price>
        </row>
        <row id="3">
            <model>Samsung Galaxy S9+</model>
            <price>$999.00</price>
        </row>
        <row id="4">
            <model>Huawei P20 Pro</model>
            <price>$2,000.00</price>
        </row>
        <row id="5">
            <model>Google Pixel XL 3</model>
            <price>$899.00</price>
        </row>
    </rows>
$$ AS mobile_data;

Мы можем получить это в формате строки.

SELECT xmltable.*
FROM xml_mobile_data,
    XMLTABLE('/rows/row' 
             PASSING mobile_data 
             COLUMNS
                ordinality FOR ORDINALITY,
                model_id INT PATH '@id',
                model TEXT PATH 'model',
                "price" MONEY
    );  

Другим способом является использование WITH QUERY CTE (COMMON TABLE EXPRESSIONS)

WITH xmldata(data) AS (VALUES ('
<rows>
    <row id="1">
        <model>Samsung Galaxy Note 9</model>
        <price>$3,000.00</price>
    </row>
    <row id="2">
        <model>iPhone X</model>
        <price>$1,000.00</price>
    </row>
    <row id="3">
        <model>Samsung Galaxy S9+</model>
        <price>$999.00</price>
    </row>
    <row id="4">
        <model>Huawei P20 Pro</model>
        <price>$2,000.00</price>
    </row>
    <row id="5">
        <model>Google Pixel XL 3</model>
        <price>$899.00</price>
    </row>
</rows>
'::XML))
SELECT xmltable.*
FROM xmldata, 
        XMLTABLE('/rows/row' 
             PASSING data 
             COLUMNS
                ordinality FOR ORDINALITY,
                model_id INT PATH '@id',
                model TEXT PATH 'model',
                "price" MONEY
    );  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...