0

我正在尝试在任何 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

4

1 回答 1

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;
}

于 2008-10-04T21:34:02.613 回答