2011-09-07 71 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來解析它。 –