Vous y étiez presque lors de votre première tentative. Lors de l'évaluation du XPath, lorsque vous êtes dans la liste d'attributs avec /TableAConfig/@*
, vous n'avez pas besoin de text()
pour obtenir la valeur de l'attribut à l'intérieur. Vous êtes déjà au niveau de l'attribut, vous n'utilisez donc qu'un "point" .
pour le nœud actuel serait suffisant.
Alors essayez quelque chose comme ça -
SELECT XMLElement("TableAConfigList",
(SELECT
XMLAgg(
XMLElement("TableAConfig",
XMLAttributes(
tmp."attr_name" as "name",
tmp."attr_text" as "value"
)
)
) from XMLTable('/TableAConfig/@*'
passing TableA.TableA_config
columns
"attr_name" varchar(30) path 'name()',
"attr_text" varchar(30) path '.'
) tmp
)
) from dual
La seule différence par rapport à votre première tentative est le xpath de la value
attribut.