2011-09-07 72 views
0

我正在从Web服务中返回一些XML。基本上,XML看起来是这样的:使用NSXMLParser解析

<response> 
    <data> 
    More XML here but the it's escaped by XML entities 
    </data> 
</response> 

所以,你可以看到,我的XML是有效的,但数据标签里面的东西是逃脱了与XML实体。什么是最好的(最有效的)方式来将它提供给解析器?

我现在正在做的是,当我从Web服务获取数据时,我将它转换为NSString ....然后将“XML转义实体”替换为真正的.....然后将其转换回来到NSData中...然后将其馈入解析器。这似乎不是一个很好的解决方案,所以我想知道是否有更好的方法来做到这一点?

谢谢。

好吧,下面是我收到的XML:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Header><ActivityId CorrelationId="d39007b5-ee69-41c7-a61d-831b456f9ea3" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">aa88d1cd-253c-48d1-abeb-62a880bea806</ActivityId></s:Header><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><LoginResponse xmlns="http://MSS"><LoginResult>&lt;LoginInformation&gt;&#xD; 
    &lt;User&gt;&#xD; 
    &lt;UserID&gt;612&lt;/UserID&gt;&#xD; 
    &lt;UserName&gt;Demo User&lt;/UserName&gt;&#xD; 
    &lt;Email&gt;[email protected]&lt;/Email&gt;&#xD; 
    &lt;CompanyID&gt;17034&lt;/CompanyID&gt;&#xD; 
    &lt;CompanyName&gt;PlanET Demonstration Agency&lt;/CompanyName&gt;&#xD; 
    &lt;/User&gt;&#xD; 
&lt;/LoginInformation&gt;</LoginResult></LoginResponse></s:Body></s:Envelope> 

正如你所看到的,一切都在被转义。

+0

你能提供一个更好的例子吗?是否只是像&这样的数据中的东西被转义或者是否存在像<元素名称>等被转义的完整xml标记... – bryanmac

+0

更新了我的问题。请检查一下。谢谢 – 0xSina

回答

0

这有点可怕。为什么不只是将该标签的内容(例如数据与实体)一起传递给另一个NSXMLParser呢?第一个解析器将解码实体,第二个解析器将显示该标签内容的解码版本。

+0

对不起,我不确定你的意思。我仍然需要将数据标记的内容转换为NSString,使用实体,将其放回到NSData中,然后将其发送到下一个解析器。或者我误解了你的观点? – 0xSina

+0

你误会了。当您通过NSXMLParser传递数据时,首先根据解析器的语义,它将为您提供一个单一的NSData,用于标记的整个文本,或者它将为您提供文本和实体的一系列数据(我不太确定是哪一个)。如果是后者,则可以将它们全部压缩为单个NSData。无论哪种方式,您最终都会得到一个包含内容的NSData,其中所有实体都已经转义。然后你可以通过另一个NSXMLParser来解析它。 –