Во-первых, полученный вами отчет верен: правильно сформированный документ XML не может использовать префикс без привязки его к пространству имен. Если ваше целевое приложение не может обработать это, то это не соответствует спецификации XML.
Однако вы можете попробовать переместить объявление пространства имен в ваш элемент root вместо того, чтобы повторять его на каждом address::*
элемент. Вместо:
<xsl:element name="Items" >
используйте:
<Items xmlns:address="http://base.google.com/ns/1.0">
и удалите то же объявление пространства имен из начального тега xsl:stylesheet
. Это должно привести к документу, структурированному как:
<Items xmlns:address="http://base.google.com/ns/1.0">
<item>
<entity_id/>
<grand_total/>
<shipping_amount/>
<state/>
<created_at/>
<address:customer_id/>
<address:firstname/>
<address:lastname/>
<address:company/>
<address:street/>
<address:city/>
<address:telephone/>
<address:email/>
<address:region/>
</item>
</Items>
, который, надеюсь, ваше целевое приложение может обработать лучше, чем ваш (семантически идентичный) текущий результат.
Как отмечалось в комментариях, вы можете упростить свою таблицу стилей, заменив все остальные инструкции xsl:element
на буквальные элементы результата.