NSXMLParser错误,如何摆脱XML标签内的无效字符?

时间:2011-04-07 18:39:58

标签: iphone objective-c encoding nsxmlparser

大家好,感谢您的帮助。

情况如下: 我正在使用一个web服务,它以下列方式返回一条肥皂消息:

    <?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>;

我的问题是,它也无视了&amp; &LT; &GT;在联系人标记内部,当然NSXMLParser会抛出错误,因为这些是XML标记内的无效字符。

我的问题是,我该如何避免这种情况?有没有办法在将信息传递给Parser之前只回退标签邮件内容?

非常感谢任何帮助。

编辑我使用:

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

1 个答案:

答案 0 :(得分:1)

您是否控制网络服务?传递getMessageReturn的正确方法是使用CDATA。否则,正确的编码将是这样的(注意消息本身和额外的&amp; 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。