LINUX.ORG.RU

Java SAX Parser проблема с '<' в значении атрибута


0

0

В общем, такой вот xml:

<task> <question text="E = __ c<sup>2</sup>"/> <answer text="m"/> </task>

при разборе парсер выдает:

org.xml.sax.SAXParseException: The value of attribute "text" associated with an element type "null" must not contain the '<' character.

Как это обойти? Суть в том, что эта строчка должна потом отобразиться на html-страничке, и если, к примеру, вместо символа '<' или '>' писать &lt; или &gt;, то это не сработает, т.к. мне нужна именно формула, а так выводится выражение E = __ c<sup>2</sup>.

Ну замени на какой-нибудь другой символ или порядок символов. А перед выбрасыванием в браузер делай обратную подмену.

Anoxemian ★★★★★
()

У тебя XML получается не валидный. И вообще, судя по примеру, ты хочешь странного. Так не делают. Я бы сделал так:

<task>
 <question>
  <text>E = __ c<sup>2</sup></text>
 </question>
 <answer>
  <text>m</text>
 </answer>
</task>

Cantor ★★
()

Не надо совать html в атрибуты. XML - слишком тупой формат, чтобы подобные вещи переваривать.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

а я думал, между одной кавычкой и другой можно вставлять все, что хочешь.

jet_bird
() автор топика

На entity типа &lt; переделать... или тот же ХТМЛ в цдату запихать. Например <![CDATA[html here]]> (хм... вроде не соврал)

zJes ★★
()
Ответ на: комментарий от zJes

>На entity типа &lt; переделать... или тот же ХТМЛ в цдату запихать. Например <![CDATA[html here]]> (хм... вроде не соврал)

кстати, получилось с &lt; все-таки. У меня в дебаггере видно, что в строке эти символы преобразуются в '<'. Но когда генерируется html-страница, происходит обратное! Оно снова превращается в "&lt"!!! Я думал, эта фича какая-то, пробовал заменить исходную &lt на, к примеру, _lt, и самостоятельно в парсере преобразовывал это к '<' функцией String.replaceAll(). То же самое. :(

Видимо, уникодовая строка автоматически преобразовывает все такие символы в специальные, когда попадает в html.

jet_bird
() автор топика
Ответ на: комментарий от jet_bird

Чтобы не было таких "видимо" и undefined behavior, не надо пользовать высокие алгоязыки. Создатели java за тебя решили что и как должно быть.

Anoxemian ★★★★★
()
Ответ на: комментарий от jet_bird

Ты просто попробуй поиграться с энтитями в парсере, я не помню уже как в других, а тем более не знаю как в яве, но парсеру можно указать какая энтити и как ее переваривать, в твоем случае никак :)

zJes ★★
()
Ответ на: комментарий от Anoxemian

Что значит "создатели java"? Во-первых, это создатели всего лишь одного (из многих) парсера (и сериалайзера). Во-вторых, надо для начала посмотреть спеки xml - разрешено ли такое в атрибутах вообще...

svu ★★★★★
()

xml невалидный получился, а по соглашению, если xml невалидный, то парсер прерывается с ошибкой. Изучи формат получше, тогда и подобные вопросы отпадут.

Zmacs
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.