Ваш выходной документ:
<Root>
<Auto xmlns="http://www.Root.com/XMLSchema/Auto">
<Applicant xmlns="">
<ApplicantType>Applicant</ApplicantType>
</Applicant>
</Auto>
</Root>
И это правильно, если вы посмотрите, как вы указали буквенный URI пространства имен в преобразовании. Фактически вы квалифицировали элементы следующим образом:
{}Root
-{http://www.Root.com/XMLSchema/Auto}Auto
-{}Applicant
-{}ApplicantType
У вас нет квалификации Root
, а также Applicant
и ApplicantType
. Поскольку неквалифицированные имена по умолчанию обрабатываются как элементы, принадлежащие пустому пространству имен (xmlns = ""), ваш выходной документ должен указывать это по крайней мере в тех узлах, которые могут вызвать неоднозначность или неправильную интерпретацию документа.
Что вы, вероятно, пропустили, так это то, что в XSLT , когда в преобразовании вы указываете буквенный URI пространства имен для конкретного элемента, который вы квалифицируете только для этого элемента (ни его потомков, ни любого другого потомка). Таким образом, в XSLT, если вы хотите избавить вас от необходимости определять пространство имен для каждого объявленного элемента, вы должны использовать глобальное пространство имен по умолчанию . Это правильно определит каждый элемент в пространстве имен, а также пропустит большинство объявлений пространства имен в ваших выходных данных. Вы также можете использовать:
exclude-result-prefixes="#default"
для удаления лишних объявлений пространства имен.
Подумайте о добавлении глобального пространства имен с префиксом только в том случае, если оно действительно вам нужно (например, вы знаете, что в выходном документе будут конфликты имен).
Ваш вопрос :
Как удалить это пустое пространство имен?
Вы должны спросить себя сейчас: где квалифицировать мои элементы (и его потомков) (раз и навсегда)?