\startbuffer[doc]
<?xml version "1.0"?>
<document>
        <p>Temperature 20 °C 20 °C 20 °C 20 °C average.</p>
        <p>Altitude 6000&amp;nbsp;m 6000&amp;nbsp;m 6000&amp;nbsp;m 6000&amp;nbsp;m average.</p>
</document>
\stopbuffer

\startluacode
function lxml.preprocessor(data)
    -- data = string.gsub(data, "&amp;nbsp;", "~")
    -- replacement nbsp invisible in luacode
    data = string.gsub(data, "&amp;nbsp;", " ")
    return data
end
\stopluacode


\startxmlsetups xml:name
    \xmlsetsetup{\xmldocument}{*}{-}
    \xmlsetsetup{\xmldocument}{document|p}{xml:name:*}
\stopxmlsetups
\xmlregistersetup{xml:name}

\startxmlsetups xml:name:document
\xmlflush{#1}\par
\stopxmlsetups

\startxmlsetups xml:name:p
\parfillskip0pt\xmlflush{#1}\par
\stopxmlsetups

\startTEXpage[offset=5mm,width=60mm]
\xmlprocessbuffer{xml:name}{doc}{}
\stopTEXpage

