Не путайте пространства имен и объявления пространств имен. Пространство имен является внутренним свойством каждого элемента. Объявление пространства имен является атрибутом `xmlns '. Они не одно и то же, хотя они связаны. Когда вы создаете элемент, вы устанавливаете его пространство имен, а не его объявление пространства имен.
В моделях данных XOM пространства имен не являются атрибутами. Они являются неотъемлемым свойством самого элемента. В XML нет правила, согласно которому дочерние элементы элемента должны находиться в том же пространстве имен, что и родительский элемент. Действительно, теоретически каждый элемент в документе может находиться в другом пространстве имен.
В XOM вы указываете пространство имен элемента или атрибута одновременно с указанием локального имени. Когда вы создаете элемент, элемент изначально не имеет родителя, поэтому XOM не может по умолчанию предоставить элементу то же пространство имен, что и его родительский элемент, даже если это то, что нужно (и это не так).
Когда документ сериализуется, пространства имен представляются атрибутами xmlns
и xmlns:*prefix*
. XOM выясняет, куда поместить эти элементы, чтобы они соответствовали пространствам имен, назначенным для каждого элемента. Просто укажите пространство имен, которое вы хотите для каждого элемента в вашем коде, и позвольте XOM выяснить, куда поместить объявления пространства имен.