Как добавить пространство имен xml к некорневому элементу в Java? - PullRequest
0 голосов
/ 07 марта 2012

Я получаю XML, который выглядит следующим образом, и использую XMLBeans для его анализа:

<reply xmlns="http://www.xmlisfun.com/abc/def/1.0">
    <item-list>
        <item>
            <item-data>data</item-data>
        </item>
    </item-list>
</reply>

В схеме есть сложный тип с именем ItemListReplyType, который импортируется.

Из-за того, что кто-то возится с определением схемы, объекты, проанализированные XMLBeans, не будут правильно генерировать объект ItemListReplyType. Объект ItemListReplyType всегда будет говорить, что он не содержит никаких объектов «item». Это связано с конфликтом пространства имен.

Я заметил, что когда я анализирую следующее, я могу нормально получить свой массив объектов в коде из объекта ItemListReplyType (массив не пустой - объекты "item" присутствуют, как и ожидалось).

<reply xmlns="http://www.xmlisfun.com/abc/def/1.0">
    <item-list>
        <prefix:item xmlns:prefix="http://www.xmlisfun.com/particular_namespace">
            <prefix:item-data>data</prefix:item-data>
        </prefix:item>
    </item-list>
</reply>

Нет необходимости говорить, что правильным решением было бы исправить взлом, сделанный для схемы, и заново сгенерировать все объекты XMLBeans. Однако это было бы очень хорошим решением год назад, прежде чем проект был построен на всех этих объектах. Я бы лучше не связывался с этим.

Есть ли способ просто легко изменить XML, чтобы добавить пространство имен и префикс ко всем элементам элемента и его дочерним элементам? Я борюсь с желанием сделать это вручную и покончить с этим. Я подумал, что проверю здесь помощь.

Спасибо.

1 Ответ

1 голос
/ 07 марта 2012

Не уверен, в какой форме находится ваш XML. Ваш предложенный мод слишком сложен, вам просто нужно настроить элемент item, чтобы добавить xmlns = "blah". Может быть легко просто сделать быстрый взлом строки, или правильное решение - запустить преобразование xsl или шаг parse-fix-serialise, чтобы добавить бит xmlns. НТН

...