Можно ли отобразить «<» или «>» в ​​сгенерированном источнике XML с помощью XStreamMarshaller - PullRequest
0 голосов
/ 09 марта 2011

Я пытался использовать XStreamMarshaller для генерации вывода XML в моем проекте Java Spring. XML, который я генерирую, имеет значения CDATA в тексте элемента. Я вручную создаю этот текст CDATA в объекте команды так:

 f.setText("<![CDATA[cdata-text]]>");

XStreamMarshaller сгенерировал элемент (текстовые данные ниже - псевдоним):

<text-data><![CDATA[cdata-text]]></text-data>

Вышеуказанное отображение XML соответствует ожидаемому (игнорируйте обратную косую черту в названии элемента выше: форматирование форума ). Но когда я делаю Просмотр источника в сгенерированном XML-выводе, я вижу это для элемента: <text-data>&lt;![CDATA[cdata-text]]&gt;</text-data>.

Выпуск:

Как вы можете видеть, символы меньше и больше были заменены на &lt; и &gt; в View Source. Мне нужно, чтобы мой клиент прочитал исходный код и идентифицировал раздел CDATA из вывода XML, чего не будет в приведенном выше сценарии.

Есть ли способ заставить XStreamMarshaller экранировать специальные символы в предоставленном мною тексте?

Я установил кодировку Marshaller на ISO-8859-1, но это тоже не работает. Если XStreamMarshaller не может выполнить вышеизложенное, можете ли вы предложить альтернативные маршаллеры / демаршаллеры, которые могут сделать это для меня?

// Отображение моего XML и View Source в соответствии с предложением Paŭlo Ebermann ниже:

Просмотр XML (как показано в IE):

An invalid character was found in text content. Error processing resource 'http://localhost:8080/file-service-framework/fil...

Los t

Источник:

<service id="file-text"><text-data>&lt;![CDATA[
Los túneles a través de las montañas hacen más fácil viajar por carretera.
]]&gt;</text-data></service>

Большое спасибо.

1 Ответ

0 голосов
/ 09 марта 2011

Создание разделов CDATA - задача вашей библиотеки, генерирующей XML, а не ее клиента.Поэтому вам просто нужно написать

f.setText("cdata-text");

, и тогда библиотека сможет решить, использовать ли <![CDATA[ ... ]]> или &lt; -эскейпинг для своего содержимого. Это не должно иметь никакого значения для приемника .


Редактировать:

Если смотреть на ваш вывод, он выглядит правильно (кромеCDATA) - здесь вы должны работать над своим вводом, как сказано.

Если IE выдает здесь ошибку, скорее всего, вы не объявили правильную кодировку.

Я не совсемзнаю много о среде Spring, но кодировка, используемая Marshaller, должна быть той же кодировкой, что и кодировка, отправляемая либо в заголовке HTTP (Content-Type: ... ;charset=...), либо в прологе <?xml version="1.0" encoding="..." ?> XML (эти два также не должны отличаться).

Я бы рекомендовал UTF-8 в качестве кодировки везде, поскольку она может представлять все символы, а не только символы Latin-1.

...