Выражение разметки в файлах свойств 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)


arrow_upward
2
arrow_downward

Не эквивалентно, но текстовое значение, которое вы получаете, вызывая 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

arrow_upward
1
arrow_downward

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

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

person Community    schedule 04.02.2010

arrow_upward
0
arrow_downward

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

Например, если вы используете его на 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