JAXB - выделение кода с одинарной кавычкой - PullRequest
2 голосов
/ 17 января 2012

Я использую JAXB для генерации XML, который загружается в наш канал Google. При тестировании и сравнении вывода этого нового метода с выводом старого способа, которым мы это делали (с использованием JSP), я заметил, что символы одинарных кавычек обрабатываются неправильно.

Содержание поля:

& ' " > <

Старый правильный вывод:

<title> &amp; &#39; &quot; &gt; &lt; </title>

Новый неверный вывод:

<title> &amp; ' &quot; &gt; &lt; </title>

Я попытался заменить все одинарные кавычки в поле на

&#39

до того, как я произвожу маршал XML, но в итоге я заменяю амперсанд его символьным кодом, а также оставляю меня с бесполезной # 39, сидящей там после маршаллинга.

В какой момент я должен попытаться решить эту проблему? Могу ли я получить правильное поведение, изменив строку каким-либо образом, прежде чем передать ее в класс JAXB, или я должен что-то сделать, чтобы изменить способ, которым маршаллинг обрабатывает одинарные кавычки?

Спасибо за чтение!

EDIT: Извините, что раньше я не был более ясен, документация Google требует, чтобы эти 5 символов были представлены их кодами сущностей или символов.

Из их документации:

Значения данных, отсутствующие в разделах CDATA, включая URL-адреса, должны использовать escape-коды для символов, перечисленных в следующая таблица Вы можете использовать либо код объекта, либо код символа для представления этих специальных символов.

Ampersand & &amp; &#38;
Single Quote ' &apos; &#39;
Double Quote " &quot; &#34;
Greater Than > &gt; &#62;
Less Than < &lt; &#60;

Я бы хотел избежать маршрута CDATA, если это возможно.

1 Ответ

3 голосов
/ 17 января 2012

Одиночные кавычки не должны быть экранированы. Второй вывод верен в отношении формата XML и более сжат, что еще лучше.

Если вы хотите детально контролировать, какие символы экранируются (и как), вы можете попытаться реализовать свой собственный CharacterEscapeHandle. Никогда не пробовал, но это задокументировано как особенность JSXB RI.

Смотри также:

...