我正在尝试在任何 HTML 元标记中获取 charset 属性。(即。< meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" >
)有没有办法在linux下的C++中做到这一点。我使用 HTML tidy 作为解析器,但我无法让该属性返回与 us-ascii 不同的任何内容(即使编码是 utf-8)
这是我得到的输出:*.*4 节点:元
名称attr: http-equiv
值 attr: 内容类型
名称 attr: 内容
值 attr: text/html; charset=us-ascii
1 回答
根据 Vinko Vrsalovic 的要求,这里是得到该结果的代码:
void dumpNode( TidyNode tnod, int indent )
{
TidyNode child;
for (child = tidyGetChild(tnod); child; child = tidyGetNext(child) )
{
ctmbstr name;
switch ( tidyNodeGetType(child) )
{
case TidyNode_Root: name = "Root"; 休息;
case TidyNode_DocType: name = "DOCTYPE"; 休息;
case TidyNode_Comment: name = "Comment"; 休息;
case TidyNode_ProcIns: name = "处理指令"; 休息;
case TidyNode_Text: name = "Text"; 休息;
case TidyNode_CDATA: name = "CDATA"; 休息;
case TidyNode_Section: name = "XML Section"; 休息;
case TidyNode_Asp: name = "ASP"; 休息;
case TidyNode_Jste: name = "JSTE"; 休息;
case TidyNode_Php: name = "PHP"; 休息;
case TidyNode_XmlDecl: name = "XML 声明"; 休息;
案例 TidyNode_Start:
案例 TidyNode_End:
案例 TidyNode_StartEnd:
默认值:
TidyAttr att = tidyAttrFirst(child);
while (att)
{
std::cout < <"名称属性:" << tidyAttrName(att) << std::endl;
std::cout<<"值属性:"<< tidyAttrValue(att) << std::endl;
att = tidyAttrNext(att);
}
打破;
}
断言(名称!= NULL);
printf("%d*.*%d%sNode: %s\n", indent, indent, " ", name );
转储节点(孩子,缩进+ 4);
}
}
void dumpHtml( TidyDoc tdoc)
{
dumpNode( tidyGetHtml(tdoc),0 );
}
int main(int argc, char **argv) {
std::string toReturn("");
TidyBuffer 输出;
TidyBuffer 错误;
int rc = -1;
布尔确定;
tidyBufInit(&output);
tidyBufInit(&errbuf);
TidyDoc tdoc = tidyCreate();
ok = tidyOptSetBool(tdoc, TidyXhtmlOut, 是的); // 转换为 XHTML
if ( ok )
rc = tidySetErrorBuffer( tdoc, &errbuf ); // 捕获诊断
if ( rc >= 0 )
rc = tidyParseFile(tdoc, "fuebuena.html"); // 解析输入
if ( rc >= 0 )
rc = tidyCleanAndRepair( tdoc ); // 整理一下!
if (rc >= 0)
dumpHtml(tdoc);
返回0;
}