ifstream toOpen;
openFile.open("sample.html", ios::in);

if(toOpen.is_open()){
    while(!toOpen.eof()){
        getline(toOpen,line);
        if(line.find("href=") && !line.find(".pdf")){
                start_pos = line.find("href");
        tempString = line.substr(start_pos+1); // i dont want the quote
            stop_pos = tempString .find("\"");
                string testResult = tempString .substr(start_pos, stop_pos);
        cout << testResult << endl;
        }
    }

    toOpen.close();
}

我正在尝试做的是提取“href”值。但我无法使它正常工作。

编辑:

感谢Tony的提示,我使用了这个:
if(line.find("href=") != std::string::npos ){
    // Process
}

有用!!

最佳答案

我建议不要尝试像这样解析HTML。除非您对源非常了解,并且对如何格式化非常确定,否则您所做的任何事情都有可能会出现问题。 HTML是一种丑陋的语言,带有(几乎)自相矛盾的规范,该规范(例如)说不允许出现某些特定的事物,但随后继续告诉您,无论如何都需要您解释它们。

更糟糕的是,几乎任何字符都可以(至少潜在地)以至少三种或四种不同的方式进行编码,因此,除非首先扫描(并以正确的顺序)进行正确的转换,否则最终会丢失合法链接和/或包括“幻像”链接。

您可能需要查看previous question的答案,以获取有关要使用的HTML解析器的建议。

关于c++ - 读取文件并仅提取某些部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4279200/

10-13 02:01
查看更多