Java XMLStreamReader преобразует "в" - PullRequest
0 голосов
/ 26 апреля 2018

Предположим, у нас есть следующий XML

<Test> <Description> &quot;Hi&quot; </Description> </Test>

Я загружаю этот XML с помощью XMLStreamReader и анализирую с помощью объекта reader. Когда я печатаю символы, встречающиеся при разборе, с помощью getText () читателя, я вижу, что &quot; печатается как ". Хотя" (двойные кавычки) не нужно было экранировать до &quot; в первую очередь Я хотел бы знать, почему анализатор автоматически выполняет это преобразование, когда экранирование не требуется. Например, &lt;, &gt; and &amp; сохраняется, без чего результирующий XML будет недействительным. Однако это не относится к &quot; and &apos;. Я должен сохранить описание так же, как я его получил. Возможно ли это сделать с помощью API XMLStreamReader?

1 Ответ

0 голосов
/ 26 апреля 2018

Я должен сохранить описание так же, как я его получаю.

Вы не должны.Что касается XML, то &quot; или " - это одно и то же, и поэтому для вас не имеет значения, получаете ли вы одно или другое.

Что касается того, почему это происходит, то этоРабота XML-парсера по удалению экранированных символов, чтобы они представляли вам данные, которые они имеют в виду.Это также убегает &lt; и так далее.Однако, когда полученный текст затем сериализуется обратно в XML, сериализатор снова будет экранировать символы, такие как <, потому что это требуется для XML, но он не будет мешать экранировать ", потому что в этом нет необходимости.

Когда вы проходите процесс синтаксического анализа XML, а затем снова сериализуетесь, у вас не может быть концепции «сохранения» escape-кодов как есть.Это по сути теряется в конверсии.Парсер просто не отвечает за сохранение этой ненужной информации.Однако, если вы хотите, чтобы ваш " всегда был экранирован до &quot; в результирующем XML, ваш XML-сериализатор может иметь опцию для этого (вы не сообщили подробностей о том, что вы используете, поэтому я не могу вам сказать,определенно можете ли вы или не можете.)

...