Essayez ceci :
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;
Produit exactement la sortie demandée.
Tout d'abord, dans la sous-requête, je récupère des nœuds de perroquet entiers. Un nœud par ligne.
Ensuite, je récupère le nom et les descripteurs avec xpath(). Les deux sont des tableaux. Je prends le premier (et unique) élément de name
et divisez le descriptor
array avec `unnest(), arrivant ainsi au résultat souhaité.
J'ai écrit une réponse complète à une question connexe récemment. Peut vous intéresser.