将 HTML <Tag> 解析为 ios

Posted

技术标签:

【中文标题】将 HTML <Tag> 解析为 ios【英文标题】:Parsing HTML <Tag> into ios 【发布时间】:2012-12-28 12:02:08 【问题描述】:

我正在使用 Hpple 将 html 标记解析到 ios 中。我能够解析 HTML 标签所在的数据

 <div id="NewsPageSubTitle">
         <p><**span** hi how are you>

使用ios代码:

NSString *tutorialsXpathQueryString = @"//div[@id='NewsPageArticle']/p/span ";
 NSArray *tutorialsNodes = [tutorialsParser searchWithXPathQuery:tutorialsXpathQueryString];

但在少数情况下我没有跨度,即 html 中的字符串由标记“p”直接访问,例如:

<div id="NewsPageSubTitle">
             <p>< hi how are you>

这里我使用ios代码为:

NSString *tutorialsXpathQueryString = @"//div[@id='NewsPageArticle']/p ";
     NSArray *tutorialsNodes = [tutorialsParser searchWithXPathQuery:tutorialsXpathQueryString];

但在这里我得到一个空白数据作为响应。

谁能告诉我如何解决这个问题?

【问题讨论】:

【参考方案1】:

因为有时 para 标记有跨度,有时没有,我建议尝试通过循环遍历子级来处理它

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
    NSData  * data      = [NSData dataWithContentsOfFile:filePath];
    TFHpple * tutorialsParser       = [[TFHpple alloc] initWithHTMLData:data];

    NSString *tutorialsXpathQueryString = @"//div[@id='NewsPageSubTitle']";
    NSArray *tutorialsNodes = [tutorialsParser searchWithXPathQuery:tutorialsXpathQueryString];

    for (TFHppleElement * element in tutorialsNodes) 
        NSLog(@"%@", element);
        NSLog(@"%@", [element tagName]);
        NSLog(@"%@", [element attributes]);
        NSLog(@"%@", [element children]);
        for (TFHppleElement *childElement in [element children]) 
                NSLog(@"%@", childElement);
        
    

【讨论】:

【参考方案2】:

检查:https://github.com/mwaterfall/MWFeedParser

这将为 iphone sdk 提供 HTML 解析器。

更多帮助:

this blog 和 here。

【讨论】:

【参考方案3】:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"html" inDirectory:@"New Folder 2"];
NSData  * data      = [NSData dataWithContentsOfFile:filePath];

NSFileHandle *readHandle = [NSFileHandle fileHandleForReadingAtPath:filePath];

NSString *htmlString = [[NSString alloc] initWithData:[readHandle readDataToEndOfFile] encoding:NSUTF8StringEncoding];


TFHpple * Parser       = [[TFHpple alloc] initWithHTMLData:data];

NSString *query = @"//p";

NSArray *nodes = [Parser searchWithXPathQuery:query];
for (TFHppleElement *item in nodes)
    
       NSLog(@"Title : %@", item.content);

            NSLog(@"URL : %@", [item.attributes valueForKey:@"href"]);
      

【讨论】:

以上是关于将 HTML <Tag> 解析为 ios的主要内容,如果未能解决你的问题,请参考以下文章

layuiLayui的tag标签

爬虫 BeautifulSoup

Python-bs4解析html

在 JSON 中解析 <img src> 标签 - iOS

DOM 解析器,允许 HTML5 样式的 </ 在 <script> 标记中

CodeSandbox.io <img> 标签未加载图像