2010-12-02 2 views
0

Здравствуйте, я новичок в разработке iPhone. Я создал одно приложение, которое потребляет данные из веб-службы. И он отлично работает, но у меня проблема с разбором.XML-синтаксический анализ - iPhone

данные XML, которые я получаю от веб-сервиса:

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> 
<h4>A PHP Error was encountered</h4> 

<p>Severity: Warning</p> 
<p>Message: session_start() [<a href='function.session-start'>function.session-tart</a>]: 
Cannot send session cookie - headers already sent by (output started at D:\xampp\htdocs\system  
\application\controllers\isignin.php:4)</p> 
<p>Filename: libraries/session.php</p> 
<p>Line Number: 146</p> 

</div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> 

<h4>A PHP Error was encountered</h4> 

<p>Severity: Warning</p> 
<p>Message: session_start() [<a href='function.session-start'>function.session-start</a>]:  Cannot send session cache limiter - headers already sent (output started at D:\xampp\htdocs\6d\system \application\controllers\isignin.php:4)</p> 
<p>Filename: libraries/session.php</p> 
<p>Line Number: 146</p> 

</div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> 

<h4>A PHP Error was encountered</h4> 

<p>Severity: Warning</p> 
<p>Message: Cannot modify header information - headers already sent by (output started at D:\xampp\htdocs\6d\system\application\controllers\isignin.php:4)</p> 
<p>Filename: codeigniter/Common.php</p> 
<p>Line Number: 360</p> 

</div><?xml version="1.0" encoding="utf-8"?> 
<xml><item>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;newblock&gt;&lt;name&gt;abcde 
&lt;/name&gt;&lt;password&gt;12345678&lt;/password&gt;&lt;/newblock&gt;</item></xml> 

Это то, что я называю из connectionDidFinishLoading метода:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
    { 
     NSLog(@"DONE. Received Bytes: %d", [webData length]); 


    if (xmlParser) 
    { 
    [xmlParser release]; 
    }  
    xmlParser = [[NSXMLParser alloc] initWithData: webData]; 
    [xmlParser setDelegate: self]; 
    [xmlParser setShouldResolveExternalEntities:YES]; 
    [xmlParser parse]; 



    [connection release]; 
    [webData release]; 
} 

Ниже приведены методы синтаксического анализа используются:

-(void) parser:(NSXMLParser *) parser 
didStartElement:(NSString *) elementName 
    namespaceURI:(NSString *) namespaceURI 
qualifiedName:(NSString *) qName 
attributes:(NSDictionary *) attributeDict { 

if([elementName isEqualToString:@"GetWeatherResult"]) 
{ 
    if (!soapResults) 
{ 
soapResults = [[NSMutableString alloc] init]; 
} 
elementFound = YES; 
} 
    } 

-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string 
{ 
if (elementFound) 
{ 
    [soapResults appendString: string]; 
} 
} 

-(void)parser:(NSXMLParser *)parser 
didEndElement:(NSString *)elementName 
namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName 
    { 
    if ([elementName isEqualToString:@"GetWeatherResult"]) 
    { 
    //---displays the country--- 
    NSLog(soapResults);   
    UIAlertView *alert = [[UIAlertView alloc] 
    initWithTitle:@"Current Temperature!"       
    message:soapResults 
    delegate:self 
    cancelButtonTitle:@"OK" 
    otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
    [soapResults setString:@""]; 
    elementFound = FALSE; 
} 
} 

Мой запрос: Я хочу извлечь «имя» тега со значением «abcde» из полученных данных XML.
Но когда я искать «имя» со значением «ABCDE» в приведенном выше XML полученных данных, анализатор не может найти его из-за & кварты, & л и т.д.

1) Как исправить мою NSMutableData, чтобы иметь нормальные значения (<,> и т. д.)? Любые встроенные функции NSMutableData для замены & lt, & с <,>? Или
2) Есть ли что отсутствует (или делает неправильно) при генерации данных XML на стороне сервера или Я пропускаю что-нибудь во время разбора на стороне клиента (на iPhone) Или
3) Любое другое решение для устраните вышеуказанную проблему.

Заранее спасибо.

ответ

-1

Я бы порекомендовал вам использовать библиотеку TBXML, она очень маленькая и имеет очень хорошую производительность. Это также довольно легко понять, по крайней мере проще, чем NSXMLParser, IMHO.

  1. Там нет сборки в функции замены & Л.Т., & GT в Objective C. Таким образом, вы можете обернуть эту строку в на сервере.
1

Try: -

[string stringByReplacingOccurrencesOfString:@"&lt" withString:@"<"]; 
+0

Спасибо. Я уже пробовал это, но я не могу передать строку в синтаксический анализатор. Я имею в виду, что объект NSStrin не может быть передан. Это дает ошибку. Мы должны передать NSData или NSMutableData объект только для синтаксического анализатора. – Prazi 2010-12-02 13:15:20

Смежные вопросы