2013-03-11 4 views
1
String retVal = null; 
Document document = DocumentHelper.createDocument(); 
Element documentRoot = document.addElement(LOAD_EVENT); 
Element header = documentRoot.addElement(HEADER); 
Element body = documentRoot.addElement(DOCUMENTS); 
Namespace namespace = 
new Namespace("", "http://www.acme.com/LoadEvent"); 
documentRoot.add(namespace); 

Это вызывает добавление xmlns к узлам заголовка и тела. Как добавить только xmlns в корневой узел, который является loadEvent?Добавление пространства имен в корневой узел вызывает добавление пространства имен для добавления дочерних узлов.

+0

любое решение для этого до сих пор? – ronnyfm

ответ

1

Да, это может ввести в заблуждение. Когда документ представлен как дерево элементов и других типов узлов, каждый элемент принадлежит определенному пространству имен, независимо от любого другого элемента элемента, даже его предков. Это справедливо для всех «основных» XML-ориентированных API: s (DOM, JDOM, DOM4J и XOM).

Поскольку вы создали элемент LOAD_EVENT, который не имеет пространства имен, но позже добавили объявление узла по умолчанию в узел, DOM4J не имел выбора, кроме как изменить пространство имен для LOAD_EVENT (здесь DOM4J позволяет очень запутанное действие, ИМХО). Однако дочерние узлы все еще не имеют пространства имен (или пустого пространства имен).

Когда вы позже сериализуете дерево в XML, пространство имен по умолчанию, указанное в корневом узле, должно быть «необъявленным» для каждого дочернего элемента.

Я предполагаю, что вы хотите что-то вроде этого:

String NS = "http://www.acme.com/LoadEvent"; 
    Document document = DocumentHelper.createDocument(); 
    Element documentRoot = document.addElement("load", NS); 
    Element header = documentRoot.addElement("header", NS); 
    Element body = documentRoot.addElement("documents", NS); 

То есть, каждый элемент принадлежит к пространству имен NS.

Другими словами: в API, ориентированном на дерево: s, узел элемента не наследует пространство имен его родителя. Каждый элемент должен быть создан с соответствующим пространством имен, если он есть.

+0

Спасибо, это решило мою проблему тоже. – Gondy