0

HTML メタ タグで charset 属性を取得しようとしています。(ie. < 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: Content-Type
名前 attr: content
値 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 名;
      switch ( tidyNodeGetType(child) )
     {
       case TidyNode_Root: name = "ルート"; 壊す;
       case TidyNode_DocType: name = "DOCTYPE"; 壊す;
       case TidyNode_Comment: name = "コメント"; 壊す;
       case TidyNode_ProcIns: name = "処理命令"; 壊す;
       case TidyNode_Text: name = "テキスト"; 壊す;
       case TidyNode_CDATA: name = "CDATA"; 壊す;
       case TidyNode_Section: name = "XML セクション"; 壊す;
       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(子);
       while (att)
       {
         std::cout < <"Name attr: " << tidyAttrName(att) << std::endl;
        std::cout< <"Value attr:"<< tidyAttrValue(att) << std::endl;
         att = tidyAttrNext(att);
       }
      ブレーク;
      assert( 名前 ! =
      NULL );
      printf( "%d*.*%d%sNode: %s\n", インデント, インデント, " ", 名前 );
      dumpNode( 子、インデント + 4 );
     }
}
void dumpHtml( TidyDoc tdoc)
{
      dumpNode( tidyGetHtml(tdoc),0 );
}

int main(int argc, char **argv) {
      std::string toReturn("");
      TidyBuffer 出力;
      TidyBuffer errbuf;
      int rc = -1;
      大丈夫です。

      tidyBufInit(&出力);
      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 に答える