Das ist ulkig, genau dasselbe Problem hatte ich auch gestern bei meinen XSLTs und bin mehr zu einem Workaround als zu einer eleganten Lösung gekommen. Das Problem ist, dass du ein Element generierst, das in einem Namespace liegt, und jetzt hier Elemente hinein
kopierst (z.B. mit copy-of), die im Default-Namespace (also "") liegen. Der XSL-Transformer verhält sich korrekt. Anscheinend kann man jedoch beim copy-of keinen Namespace angeben. Die Elemente landen also immer in dem Namespace, in dem sie ursprünglich deklariert wurden. Ich habe das Problem umgangen, indem ich die Elemente mit for-each, element und copy-of select="@*" kopiert habe. Nicht schön, funktioniert aber.
Oh, und wenn du gar kein XSL verwendest, ist dein Problem vermutlich dasselbe: Du erstellst Elemente, die im Default-Namespace liegen, innerhalb von Elementen, die in einem anderen Namespace liegen. In dem Fall hast du es vielleicht einfacher als ich, denn du kannst diesen inneren Elementen einfach denselben Namespace geben wie den übergeordneten. Wenn der
XML-Generator halbwegs vernünftig ist, wird er die Namespace-Angabe dann weglassen.