Выражение разметки в файлах свойств Java XML: CDATA и экранированные теги

Я читаю и пишу файлы свойств Java в формате XML. Многие значения свойств имеют встроенный HTML, который разработчики заключают в элементы [[CDATA следующим образом:

<entry key="foo"><![CDATA[
    <b>bar</b>
]]></entry>

Однако, когда я использую API Java для загрузки этих свойств, а затем записываю их обратно в XML, он не заключает эти записи в элементы CDATA, а скорее экранирует теги, например:

<entry key="foo">&lt;b&gt;bar&lt;/b&gt;</entry>

Эти два формата эквивалентны? Создаю ли я какие-либо потенциальные проблемы, заменяя CDATA экранированными тегами?


person Mike Sickler    schedule 03.02.2010    source источник


Ответы (3)


Не эквивалентно, но текстовое значение, которое вы получаете, вызывая getText(), такое же.

Тем не менее, я бы посоветовал вам отказаться от Properties в пользу настоящего XML, обработанного JAXB — это здорово, вам понравится.

Не нашел ни одного хорошего, так что по крайней мере эти:

Объект -> XML: здесь

Подробное руководство Sun: http://java.sun.com/webservices/docs/2.0/tutorial/doc/JAXBUsing.html

person Ondra Žižka    schedule 03.02.2010
comment
Это для файлов локализации, поэтому у меня нет мотивации менять формат, но спасибо за ответ! - person Mike Sickler; 03.02.2010
comment
Формат свойств является проприетарным и допускает только семантику карты (даже не сохраняет порядок). API свойств плохой и громоздкий. XML является широко распространенным стандартом с сотнями инструментов для него и изначально обрабатывает древовидные структуры. Почему кто-то должен использовать .properties не только для самых основных вещей, доступных только для чтения, которые уже привязаны к ним, например, для конфигурации log4j и т. д.? - person Ondra Žižka; 04.02.2010
comment
Да, формат XML лучше, чем .properties для перевода, поскольку вам не нужно экранировать Unicode, и вам не нужно беспокоиться о том, что кодировка файла испортится. - person Mike Sickler; 05.02.2010

Когда файлы загружаются в память в объекте свойств, нет никакой разницы между двумя форматами, которые вы показали, как ответил Ондра Жижка. Разделы CDATA — это способ экранировать блок текста вместо экранирования каждого символа в нем.

Я бы сам рассмотрел формат файла свойств, отличный от xml, вы по-прежнему будете видеть теги в необработанных файлах, но символы новой строки необходимо будет экранировать.

person Community    schedule 04.02.2010

Да, вы можете вызвать некоторые проблемы, в зависимости от того, как используются данные.

Например, если вы используете его на HTML-странице, A<br>B будет напечатано как

A

B

Но A&lt;br&gt;B будет отображаться как

A<br>B
person Suraj Chandran    schedule 03.02.2010
comment
Это правда. Однако на самом деле это не относится к исходному вопросу. - person Max Nanasy; 19.07.2012