Eri quasi arrivato al tuo primo tentativo. Durante la valutazione dell'XPath, quando sei all'interno dell'elenco degli attributi con /TableAConfig/@*
, non hai bisogno di text()
per ottenere il valore dell'attributo al suo interno. Sei già a livello di attributo, quindi stai usando solo un "punto" .
per il nodo corrente sarebbe sufficiente.
Quindi prova qualcosa del genere -
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
L'unica differenza rispetto al primo tentativo è l'xpath del value
attributo.