Вы можете запустить XSLT-преобразование:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:template match="*">
<xsl:element name="test:{local-name()}" namespace="http://test-namepace/ns">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="test:{local-name()}" namespace="http://test-namepace/ns">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
</xsl:transform>
Я думаю, что DOM4J имеет методы для непосредственного применения преобразования XSLT 1.0, но у вас также есть возможность использовать Saxon, который обрабатывает DOM4J в качестве ввода и / или выводите вместе со многими другими моделями деревьев.
Кстати, (a) в вашем примере требований, документ результата плохо сформирован, потому что он не объявляет пространство имен, и (b) обычно не считается хорошей практикой поместите все атрибуты в то же пространство имен, что и содержащие элементы; Я дал вам решение, предполагая, что у вас есть веские причины для этого довольно странного замысла.