Странный анализ XML с символами - PullRequest
0 голосов
/ 15 декабря 2011

Я использую NSXMLParsing для анализа некоторых XML-данных.

У меня есть один элемент с именем .... <Email>abc@expressl&t.net</Email>

Так что когда didStartElement делегат отвечает на elementName Email

Для получения текста сообщения электронной почты foundCharacters.

Но в текстовой строке foundCharacters я получаю только до abc@expressl не весь текст. Это рассматривает &t как специальный символ. И вот почему после этого он входит в parseErrorOccurred делегат.

Как мне избежать таких ошибок. Я не могу жестко закодировать что-либо, чтобы заменить текст. Как электронная почта должна печатать как есть.

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Проще говоря, это не правильный XML.Символ & должен быть экранирован.Из раздела 2.4 спецификации XML 1.0 :

Символ амперсанда (&) и левая угловая скобка (<) не должны появляться в их буквальной форме,за исключением случаев, когда они используются в качестве разделителей разметки или внутри комментария, инструкции обработки или раздела CDATA.Если они нужны где-то еще, их необходимо экранировать, используя либо числовые ссылки на символы, либо строки &amp; и &lt; соответственно.

Если вы хотите использовать синтаксический анализатор XML, вам нужно дать ему действительный XML для начала.Что бы не создал , XML должен был бы избежать его для вас:

<Email>abc@expressl&amp;t.net</Email>

Что создало файл XML?Подобные вещи обычно происходят, когда люди строят XML из строк, а не используют XML API для его создания.

1 голос
/ 15 декабря 2011

Чтобы быть действительным

<Email>abc@expressl&t.net</Email>

должно быть экранировано до

<Email>abc@expressl&amp;t.net</Email>

...