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
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 を返します。
}