Coba ini:
SELECT (xpath('./@name', parrot.node))[1] AS name
, unnest(xpath('./descriptor/text()', parrot.node)) AS descriptor
FROM (
SELECT unnest(xpath('./parrot', parrot_xml.document)) AS node
FROM parrot_xml
) parrot;
Menghasilkan output yang diminta dengan tepat.
Pertama, di subquery, saya mengambil seluruh parrot-node. Satu simpul per baris.
Selanjutnya, saya mendapatkan nama dan deskriptor dengan xpath(). Keduanya adalah array. Saya mengambil elemen pertama (dan satu-satunya) dari name
dan pisahkan descriptor
array dengan `unnest(), sehingga sampai pada hasil yang diinginkan.
Saya menulis jawaban komprehensif untuk pertanyaan terkait baru-baru ini. Mungkin menarik bagi Anda.