Iphone NSXMLParser错误,如何消除XML标记中的无效字符?

Iphone NSXMLParser错误,如何消除XML标记中的无效字符?,iphone,objective-c,encoding,nsxmlparser,Iphone,Objective C,Encoding,Nsxmlparser,大家好,提前感谢你们的帮助 情况就是这样: 我使用的Web服务以以下方式返回soap消息: <?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/20

大家好,提前感谢你们的帮助

情况就是这样: 我使用的Web服务以以下方式返回soap消息:

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

您是否控制web服务?传递getMessageReturn的正确方法是使用CDATA。否则,正确的编码如下(注意消息本身和额外的&'s)


xml version=“1.0”encoding=“ISO-8859-1”?
接触
带有转义值的消息,如&;amp&;lt&;燃气轮机;
/接触

但CDATA要容易得多,这就是它的用途。如果没有其他内容,您可以在解析之前使用字符串替换插入CDATA。

您控制web服务吗?传递getMessageReturn的正确方法是使用CDATA。否则,正确的编码如下(注意消息本身和额外的&'s)


xml version=“1.0”encoding=“ISO-8859-1”?
接触
带有转义值的消息,如&;amp&;lt&;燃气轮机;
/接触

但CDATA要容易得多,这就是它的用途。如果没有其他内容,您可以在解析之前使用字符串替换插入CDATA。

我不知道您使用什么将数据转换为UTF8,但如果我记得清楚的话,NS API不会转义实体…我不知道您使用什么将数据转换为UTF8,但是如果我记得很清楚的话,NS API不会转义实体…谢谢你的回答,Rob,但是如果getMessageReturn的内容是一个完整的XML,我需要解析它或者编写一些代码来查找CDATA字符串中的信息。我想也许我可以和Web服务提供商谈谈,看看他们是否可以将每个标记内容封装在CDATA块中,这样我就能够正确地读取XML,并使用NSXMLParser的foundCData方法捕获每个标记中的数据,对吧?如果要将XML嵌入XML中,那么应该使用CDATA。您不必使每个标记内容都成为CDATA。您可以将foundCData用于此特定标记。结果将是一个字符串,然后需要重新开始(因为它是一个完全不同的文档)。顺便说一句,要手动插入CDATA,您可以使用NSScanner在字符串中找到正确的位置,然后插入它。不过,最好修复原始XML;无效。感谢Rob,您的回答让我找到了一个解决方案,该解决方案要求WS-provider将每个标记内容封装在CDATA块中,并使用NSXMLParserDelegate中的foundCDATA获取信息。感谢您的回答Rob,但是如果getMessageReturn的内容是整个XML,我需要解析它,或者编写一些代码来查找CDATA字符串中的信息。我想也许我可以和Web服务提供商谈谈,看看他们是否可以将每个标记内容封装在CDATA块中,这样我就能够正确地读取XML,并使用NSXMLParser的foundCData方法捕获每个标记中的数据,对吧?如果要将XML嵌入XML中,那么应该使用CDATA。您不必使每个标记内容都成为CDATA。您可以将foundCData用于此特定标记。结果将是一个字符串,然后需要重新开始(因为它是一个完全不同的文档)。顺便说一句,要手动插入CDATA,您可以使用NSScanner在字符串中找到正确的位置,然后插入它。不过,最好修复原始XML;无效。感谢Rob,您的回答让我找到了一个解决方案,该解决方案要求WS-provider将每个标记内容封装在CDATA块中,并使用NSXMLParserDelegate中的foundCDATA获取信息。
<?xml version="1.0" encoding="ISO-8859-1">
        <contact>
        A message with escaped values like & < >
        </contact>;
[NSString stringWithCString:(char*)elementText encoding:NSUTF8StringEncoding];
<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>