使用parsekit解析简单标记

时间:2012-12-04 19:54:37

标签: objective-c ios parsekit

我正在尝试解析一小部分HTML标记。

PKSequence *parrser = [PKSequence sequence];
[parrser add:[PKSymbol symbolWithString:@"<title>"]];   
PKWord *word = [PKWord word];
[word setAssembler:self selector:@selector(workOnWordAssembly:)];
[parrser add:word];
[parrser add:[PKSymbol symbolWithString:@"</title>"]];

PKAssembly *result = [parrser bestMatchFor:[PKTokenAssembly assemblyWithString:@"<title>teeest</title>"]];


-(void)workOnWordAssembly:(PKAssembly *)a {
        NSLog(@"We entered this");
}

但未调用workOnWordAssembly

1 个答案:

答案 0 :(得分:2)

ParseKit的开发人员。确保您使用的是head of trunk on google code

  1. 汇编程序回调now have two arguments
  2. 默认情况下,字符串<title>不会被标记为单个Symbol标记。这将是一个<符号标记,一个title字标记和一个>符号标记。但是,您可以配置该行为。
  3. 请阅读ParseKit上的文档,特别是tokenization docs,以了解ParseKit中的标记化工作原理。


    以上是完成上述基本任务所缺少的内容。但是,我不确定这是真实世界任务的最佳方法。我认为阅读上面提到的文档有助于解释这一点。

    PKTokenizer *t = [PKTokenizer tokenizerWithString:@"<title>foobar</title>"];
    [t.symbolState add:@"<title>"];
    [t.symbolState add:@"</title>"];
    
    PKAssembly *a = [PKTokenAssembly assemblyWithTokenizer:t];
    
    PKSequence *p = [PKSequence sequence];
    
    [p add:[PKSymbol symbolWithString:@"<title>"]]; 
    
    PKWord *word = [PKWord word];
    [word setAssembler:self selector:@selector(parser:didMatchWord:)];
    [p add:word];
    
    [p add:[PKSymbol symbolWithString:@"</title>"]];
    
    PKAssembly *result = [p bestMatchFor:a];
    

    -(void)parser:(PKParser *)p didMatchWord:(PKAssembly *)a {
            NSLog(@"%s %@", __PRETTY_FUNCTION__, a);
    }