6

SQL Server 2005のT-SQL言語では、次の方法でXML値を細断処理できます。

SELECT
    t.c.value('./ID[1]', 'INT'),
    t.c.value('./Name[1]', 'VARCHAR(50)')
FROM @Xml.nodes('/Customer') AS t(c)

ここで、@Xmlは次のようなxml値です。

'<Customer><ID>23</ID><Name>Google</Name></Customer>'

誰かがPostgreSQL(おそらくPL / pgSQL)で同じ結果を達成するのを手伝ってもらえますか?

4

2 に答える 2

11

このxpath関数はノードの配列を返すため、複数のパートナーを抽出できます。通常、次のようなことを行います。

SELECT (xpath('/Customer/ID/text()', node))[1]::text::int AS id,
  (xpath('/Customer/Name/text()', node))[1]::text AS name,
  (xpath('/Customer/Partners/ID/text()', node))::_text AS partners
FROM unnest(xpath('/Customers/Customer',
'<Customers><Customer><ID>23</ID><Name>Google</Name>
 <Partners><ID>120</ID><ID>243</ID><ID>245</ID></Partners>
</Customer>
<Customer><ID>24</ID><Name>HP</Name><Partners><ID>44</ID></Partners></Customer>
<Customer><ID>25</ID><Name>IBM</Name></Customer></Customers>'::xml
)) node

unnest(xpath(...))xmlの大きなチャンクを行サイズのバイトに分割するために使用する場所。個々の値をxpath()抽出します。XML配列から最初の値を抽出し、にキャストしてからtextキャストするint(またはなど)のはdatenumericあまり快適ではありません。これを簡単にするために、ブログにいくつかのヘルパー関数があります。PostgresのXML解析を参照してください。

于 2010-09-08T05:22:45.097 に答える
7

PostgreSQLのxpath-functionを使用してXMLを処理します。

編集:例:

SELECT
    xpath('/Customer/ID[1]/text()', content),
    xpath('/Customer/Name[1]/text()', content),
    *
FROM
    (SELECT '<Customer><ID>23</ID><Name>Google</Name></Customer>'::xml AS content) AS sub;
于 2010-09-06T10:09:36.700 に答える