2010-09-03 1 views
0

J'utilise TFHpple (qui utilise XPath) pour analyser un document HTML. Je peux obtenir le contenu de divers nœuds, etc. Mais le code que j'ai trouvé sur GitHub semble incomplet. Il a une méthode pour obtenir les attributs d'un noeud mais le tableau enfant. Alors j'en ai écrit un et j'ai échoué. Les deux méthodes "attributs" ci-dessous fonctionnent bien. Fondamentalement, je voudrais obtenir le tableau enfant comme un nouveau noeud. Je pense que j'échoue au niveau NSDictionary. J'ai essayé de faire un nouveau TFHppleElement de ce que je retourne dans "les enfants" ci-dessous mais ... FAIL! Des indices?Comment obtenez-vous les attributs d'un tableau enfant en utilisant TFHpple?

C'est de TFHppleElement.m:

- (NSDictionary *) attributesForNode: (NSDictionary *) myNode 
{ 
NSMutableDictionary *translatedAttributes = [NSMutableDictionary dictionary]; 
for (NSDictionary *attributeDict in [myNode objectForKey: TFHppleNodeAttributeArrayKey]) 
{ 
    //NSLog(@"attributeDict: %@", attributeDict); 
    [translatedAttributes setObject: [attributeDict objectForKey: TFHppleNodeContentKey] 
     forKey: [attributeDict objectForKey: TFHppleNodeAttributeNameKey]]; 
} 
return translatedAttributes; 
} 

- (NSDictionary *) attributes 
{ 
return [self attributesForNode: node]; 
} 

- (BOOL) hasChildren 
{ 
return [node objectForKey: TFHppleNodeChildArrayKey] != nil; 
} 

- (NSDictionary *) children 
{ 
NSMutableDictionary *translatedChildren = [NSMutableDictionary dictionary]; 
for (NSDictionary *childDict in [node objectForKey: TFHppleNodeChildArrayKey]) 
{ 
    [translatedChildren setObject: childDict 
      forKey: [childDict objectForKey: TFHppleNodeNameKey]]; 
} 
return [node objectForKey: TFHppleNodeChildArrayKey]; 
} 
+0

Où se trouve la question liée à l'expression XPath? –

+0

TFHpple utilise XPath pour effectuer l'analyse HTML initiale. Si vous l'avez utilisé, vous savez que vous pouvez obtenir le contenu, le nom et les attributs d'un nœud. Je veux le tableau des enfants. Ma tentative échoue. Heureusement, quelqu'un en sait assez sur TFHpple (et NSDictionaries/Obj-C) pour voir pourquoi la méthode de mes enfants ne fonctionne pas. –

Répondre

0

Je suppose que je faisais juste assez. Mais je finalement simplifié obtenir le tableau de nœud enfant:

- (NSDictionary *) children 
{ 
    if ([self hasChildren]) 
     return [[node objectForKey: TFHppleNodeChildArrayKey] objectAtIndex: 0]; 
    return nil; 
} 

J'ai ajouté ceci au code TFHppleElement.m j'avais téléchargé. Ensuite, je pouvais prendre ce résultat et de créer un nouveau noeud à partir duquel je pouvais extraire les attributs ou le contenu requis .:

TFHppleElement *parentNode; 
. 
. 
. 
TFHppleElement *childNode = [[[TFHppleElement alloc] initWithNode: [parentNode children]] autorelease]; 
0

Ajoutez ce qui suit à votre interface TFHppleElement/mise en œuvre:

- (NSDictionary *)children 
{ 
    return [[node objectForKey:@"nodeChildArray"] objectAtIndex:0]; 
} 

Puis, quand vous avez besoin des enfants:

... 
FHppleElement *rowAtIndex = [xpathParser at:[NSString stringWithFormat:oddRowAtIndex,ii,x]]; 
... 
... 
TFHppleElement *children = [[TFHppleElement alloc] initWithNode:[rowAtIndex children]]; 
... 
Questions connexes