I could get the node names as column names
SELECT
distinct NodeName = C.value('local-name(.)', 'varchar(50)')
-- , NodeValue = C.value('(.)[1]', 'varchar(50)')
FROM @xml.nodes('/XML/Provider/*') AS T(C)
OUTPUT
1address1NULL
2address2NULL
3address3kol
Address
city
providerID