Манипулирование строкой Java в формате XML - PullRequest
1 голос
/ 13 июля 2011

Я разрабатываю плагин, который имеет node(computer) объекты с такими атрибутами, как:

String name
String description
String labels
Launcher computerLauncher
...

Я могу преобразовать объект node(computer) в форматированную строку XML, например:

String xml = jenkins.instance.toXML(node);

Что дает мне строку:

<name>Computer1</name>
<description>This is a description</description>
<labels>label1 label2</labels>
<launcher>windows.object.launcher.12da1</launcher>

Тогда я могу пойти другим путем:

Node node = jenkins.instance.fromXML(xml);

У меня нет методов для изменения атрибутов в узле, поэтому я хочу преобразовать его в XML, изменить атрибуты som и затем снова сделать его узлом.

Я вижу два варианта

  1. Управляйте XML некоторыми методами String, чтобы заменить все, что находится между тегами <>.

  2. Попробуйте преобразовать строку XML в нечто вроде реального объекта и манипулировать им таким образом.

Не уверен, что будет лучшим подходом.

Ответы [ 3 ]

4 голосов
/ 13 июля 2011

Зачем придумывать что-то новое, когда уже есть поддержка всего этого с помощью API DOM (Document Object Model) Java?

Используйте DocumentBuilderFactory , чтобы получить DocumentBuilder и создать экземпляр Document . При этом вы можете создавать объекты 'Node' (обратите внимание, что приведенный вами пример на самом деле не действительный XML, в нем отсутствует корневой узел) в вашем методе toXML, можно выполнить сериализацию документа в строку используя Transformer .

С помощью DOM API вы также можете изменять атрибуты существующих элементов.

Синтаксический анализ экземпляра Document из строки XML снова осуществляется с помощью DocumentBuilder с использованием DocumentBuilder # parse.

Если ваши DOM-операции не слишком сложны, это будет хорошим и быстрым способом достижения вашей цели.

2 голосов
/ 14 июля 2011

Для меня имеет смысл использовать DOM-подобный подход. Но не используйте сам DOM: есть гораздо лучшие альтернативы, такие как JDOM и XOM, которые имеют более дружественные API.

0 голосов
/ 13 июля 2011

В последнее время мне приходилось манипулировать большими XML-файлами (моему программному обеспечению приходилось динамически создавать некоторые XML-файлы и получать входные данные из некоторых других XML-файлов).Для этого я использовал JAXB , который представляет собой очень аккуратный API, который автоматически объединяет файлы XML в объекты Java и объекты Java в файлы XML.

Однако для этого мне пришлось создатьXSD-файл для указания XML-файлов, из которых мне нужно было бы читать и писать.

Поэтому для настройки JAXB требуется больше работы, чем для DOM, поэтому, если ваши потребности просты, я предлагаю использовать DOM, однако, если вашпотребности более сложные, тогда я бы предложил JAXB.

...