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/