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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.