2009-11-20 3 views
0

Im utilisant NSXMLParser pour disséquer un package xml, je reçois & apos dans le texte du package.nsxmlparser ne pas résoudre '

Je donne les résultats suivants définis pour le XmlParser:

[xmlParser setShouldResolveExternalEntities: YES]; 

La méthode suivante est jamais appelé

- (void)parser:(NSXMLParser *)parser foundExternalEntityDeclarationWithName:(NSString *)entityName publicID:(NSString *)publicID systemID:(NSString *)systemID 

Le texte dans le champ avant que les & apos n'est pas considéré par l'analyseur.

En recherchant comment résoudre ceci, aucune idée ???

Merci à l'avance partie de package XML Alex

attachés:

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:appwsdl"><SOAP-ENV:Body><ns1:getObjects2Response xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"><return xsi:type="tns:objectsResult"><totalRecipes xsi:type="xsd:string">1574</totalObjects><Objects xsi:type="tns:Item"><id xsi:type="xsd:string">4311</id><name xsi:type="xsd:string"> item title 1 </name><procedure xsi:type="xsd:string">item procedure 11...... 

Répondre

0

Les entités standard sont &lt;, &gt;, &amp; et &quot;. &apos; est une référence d'entité html. Votre code XML fait-il référence à l'espace de noms XHTML ou à un autre espace de noms défini &apos;?

(BTW, serait agréable de voir un petit segment du XML, y compris l'en-tête.)

+0

J'ai attaché la partie XML, et l'analyseur fait la même chose avec le & amp, merci beaucoup pour votre aide. – alex

+0

Je suis loin de mon Mac, donc je ne peux pas faire un test pour le moment, mais avez-vous essayé 'foundInternalEntityDeclarationWithName'? –

+0

Oui, j'ai essayé tous les délégués liés à l'entité et personne ne s'appelle :( Merci beaucoup Epsilon :) – alex

1

Voici ce que je faisais, après avoir évoqué une réponse différente d'ici. J'ai remplacé toutes les occurrences du &apos; dans le fichier XML avec "'" lorsque les données sont reçues de l'objet NSURLConnection. Ensuite, je donne ces données à l'analyseur.

Alors ce que je fais est:

NSData* parserData = [self resolveHTMLEntities: self.receivedData]; 
NSXMLParser* parser = [[NSXMLaParser alloc] initwithData:parserData]; 

Voici la méthode resolveHTMLEntitites:

NSString *xmlCode = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
NSMutableString *temp = [NSMutableString stringWithString:xmlCode]; 

// Replace all the entities 
[temp replaceOccurrencesOfString:@"&amp;apos;" withString:@"'" options:NSLiteralSearch range:NSMakeRange(0, [temp length])]; 

NSData *finalData = [temp dataUsingEncoding:NSUTF8StringEncoding]; 
return finalData; 

Le hic est que &apos; est converti en &amp;apos; c'est pourquoi nous devons remplacer cette occurrence.

Remarque: Aucune gestion de la mémoire n'est effectuée dans le bloc de code ci-dessus.

Espérons que cela aide.

Questions connexes