NSXMLParser ошибка, как избавиться от недопустимых символов внутри тегов XML? - PullRequest
1 голос
/ 07 апреля 2011

Всем привет и заранее спасибо за помощь.

Это ситуация: Я использую веб-сервис, который возвращает мне мыло следующим образом:

    <?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <soapenv:Body>
  <getMessagesResponse xmlns="urn:DefaultNamespace">
   <getMessagesReturn xmlns="">
    &lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?&gt;
&lt;contact&gt;
A message with escaped values like &amp; &lt; &gt;
&lt;/contact&gt;
</getMessagesReturn>
  </getMessagesResponse>
 </soapenv:Body>
</soapenv:Envelope>

Я использую NSUTF8StringEncoding для чтения дочернего элемента getMessagesReturn, и он генерирует мне следующее:

<?xml version="1.0" encoding="ISO-8859-1">
        <contact>
        A message with escaped values like & < >
        </contact>;

Моя проблема в том, что он также не отображает & <> внутри тега контакта, и, конечно, NSXMLParser выдает ошибку, потому что это недопустимые символы внутри тега XML.

Мой вопрос: как я могу избежать этого? Есть ли способ вернуть обратно только содержимое сообщения тегов перед передачей информации в анализатор?

Любая помощь будет принята с благодарностью.

Изменить Я использую:

[NSString stringWithCString:(char*)elementText encoding:NSUTF8StringEncoding];

1 Ответ

1 голос
/ 07 апреля 2011

Контролируете ли вы веб-сервис? Правильный способ передачи getMessageReturn - это CDATA. В противном случае правильная кодировка будет выглядеть следующим образом (обратите внимание на само сообщение и дополнительные & amp)

<getMessagesReturn xmlns="">
    &lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?&gt;
&lt;contact&gt;
A message with escaped values like &amp;amp; &amp;lt; &amp;gt;
&lt;/contact&gt;
</getMessagesReturn>

Но CDATA намного проще, и для этого он и нужен. Если ничего другого, вы можете использовать подстановку строк для вставки CDATA перед анализом.

...