【问题标题】:Objective C HTML parser error "expected expression before xmlNode"Objective C HTML解析器错误“xmlNode之前的预期表达式”
【发布时间】:2011-06-06 09:52:30
【问题描述】:

关注此Simple libxml2 HTML parsing example, using Objective-c, Xcode, and HTMLparser.hhttp://benreeves.co.uk/objective-c-hmtl-parser/

作者指出 rawContentsOfNode 方法有问题。

NSArray *bodytext = [bodyNode findChildTags:@"td"];

for (HTMLNode *inputBody in bodytext) {
    //NSLog(@"%@", [inputBody getAttributeNamed:@"class"]);
    NSString *test = rawContentsOfNode(xmlNode *bodytext, htmlDocPtr doc);
}

似乎没有任何使用更新版本的示例。我不知道出了什么问题。任何解决此问题的帮助都会很棒。

【问题讨论】:

    标签: objective-c ios html-parsing


    【解决方案1】:

    StackOverflow 答案中的示例甚至无法编译,因为他刚刚复制粘贴了原始示例中的注释。

    这个:

    rawContentsOfNode(xmlNode *bodytext, htmlDocPtr doc);
    

    是函数原型的一部分,而不是函数调用。这是一个需要 xmlNodehtmlDocPtr 作为参数的 C 函数。查看the interface of HTMLNode,我们看到评论中给出的原型是错误的,应该是:

    NSString* rawContentsOfNode(xmlNode *node);
    

    源代码中没有提到与博客文章中推荐的原型匹配的函数。我不知道他们在说什么,除非在发表评论后它已被删除。

    XML 节点是 HTML 节点的公共成员,因此您可以这样做:

    test = rawContentsOfNode(inputBody->_node);
    

    但是rawContents 方法无论如何都会这样做,所以你不妨使用它。

    test = [inputBody rawContents];
    

    请注意(再次检查源代码)存在一个问题,即假定节点的内容以 UTF-8 编码,这可能是真的,但 HTTP 的默认编码是 ISO-8859-1,所以它可能不会。

    【讨论】:

    • 太棒了。非常感谢你。该死的,我以为我已经尝试过了-_-。
    猜你喜欢
    • 2014-02-22
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多