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="">
<?xml version="1.0" encoding="ISO-8859-1" ?>
<contact>
A message with escaped values like & < >
</contact>
</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标签。
我的问题是,我该如何避免这种情况?在将信息传递给解析器之前,有没有办法只回收标签消息的内容?
任何帮助将不胜感激。
编辑我用:
你控制的Web服务?传递getMessageReturn的正确方法是使用CDATA。否则,正确的编码会是这样(注意,消息本身和额外&放大器的)
<getMessagesReturn xmlns="">
<?xml version="1.0" encoding="ISO-8859-1" ?>
<contact>
A message with escaped values like &amp; &lt; &gt;
</contact>
</getMessagesReturn>
但是CDATA要容易得多,这就是它是。如果没有别的,你可以在解析之前使用字符串替换来插入CDATA。
感谢您的回答Rob,但是如果getMessageReturn的内容是整个XML,我需要解析它或编写一些代码来查找CDATA字符串中的信息。我想也许我可以和web服务提供商交谈,看看他们是否可以将每个标签内容封装在CDATA块内,这样我就可以正确读取XML并使用foundCData方法捕获每个标签中的数据NSXMLParser对不对? – 2011-04-07 19:58:55
如果您在XML中嵌入XML,那么您应该使用CDATA。您不必制作每个标签内容CDATA。你会使用foundCData这个特定的标签。结果将是一个字符串,你需要重新开始(因为它是一个完全不同的文档)。顺便说一句,手动注入CDATA,您可以使用NSScanner在字符串中找到正确的位置,然后插入它。不过,最好修复原始的XML;这是无效的。 – 2011-04-07 20:24:12
感谢Rob,您的回答让我发现了一种解决方案,它要求WS提供程序将每个标记内容封装在CDATA块中,并使用NSXMLParserDelegate中的CDATA获取信息。 – 2011-04-07 20:49:55
我不知道你用什么来将你的数据转换为UTF8,但是如果我记得NS-apis不能转义实体... – 2011-04-07 19:01:43