1

我正在尝试解析一小部分 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没有被调用。

4

1 回答 1

2

ParseKit的开发者在这里。确保您在谷歌代码上使用主干头

  1. 汇编器回调现在有两个参数
  2. 默认情况下,字符串<title>不会被标记为单个符号标记。那将是一个<符号令牌、一个title单词令牌和一个>符号令牌。但是,您可以配置该行为。

请阅读ParseKit上的文档,尤其是标记化文档,以了解 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);
}
于 2012-12-05T07:09:20.453 回答