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

问题描述:

大家好,感谢您的帮助。NSXMLParser错误,如何摆脱XML标签内的无效字符?

情况是这样的: 我消费,返回我通过以下方式SOAP消息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>; 

我的问题是,它也未逸出的& <>联系人标签里面,因为这些都是内部无效字符课程的NSXMLParser抛出一个错误一个XML标签。

我的问题是,我该如何避免这种情况?在将信息传递给解析器之前,有没有办法只回收标签消息的内容?

任何帮助将不胜感激。

编辑我用:

​​
+0

我不知道你用什么来将你的数据转换为UTF8,但是如果我记得NS-apis不能转义实体... – 2011-04-07 19:01:43

你控制的Web服务?传递getMessageReturn的正确方法是使用CDATA。否则,正确的编码会是这样(注意,消息本身和额外&放大器的)

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

+0

感谢您的回答Rob,但是如果getMessageReturn的内容是整个XML,我需要解析它或编写一些代码来查找CDATA字符串中的信息。我想也许我可以和web服务提供商交谈,看看他们是否可以将每个标签内容封装在CDATA块内,这样我就可以正确读取XML并使用foundCData方法捕获每个标签中的数据NSXMLParser对不对? – 2011-04-07 19:58:55

+0

如果您在XML中嵌入XML,那么您应该使用CDATA。您不必制作每个标签内容CDATA。你会使用foundCData这个特定的标签。结果将是一个字符串,你需要重新开始(因为它是一个完全不同的文档)。顺便说一句,手动注入CDATA,您可以使用NSScanner在字符串中找到正确的位置,然后插入它。不过,最好修复原始的XML;这是无效的。 – 2011-04-07 20:24:12

+0

感谢Rob,您的回答让我发现了一种解决方案,它要求WS提供程序将每个标记内容封装在CDATA块中,并使用NSXMLParserDelegate中的CDATA获取信息。 – 2011-04-07 20:49:55