この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
(またはなど)のはdate
、numeric
あまり快適ではありません。これを簡単にするために、ブログにいくつかのヘルパー関数があります。PostgresのXML解析を参照してください。