2009-06-11 29 views
4

サックスパーサーを使用しているときに奇妙な動作が発生していると思いますが、それが正常かどうかを知りたかったのです。LibXML2 Saxの解析とアンパサンド

私は、SAXパーサでこのXMLを送信しています:

<site url="http://example.com/?a=b&amp;b=c"; /> 

"&" がstartElementコールバック が呼ばれる "&" に変換されます。それはどうするのですか?もしそうなら、私は の理由を理解したいと思います。

私はここでの問題を実証する例を貼り付けました:

#include <stdlib.h> 
#include <libxml/parser.h> 

static void start_element(void * ctx, const xmlChar *name, const xmlChar **atts) 
{ 
    int i = 0; 
    while(atts[i] != NULL) { 
    printf("%s\n", atts[i]); 
    i++; 
    } 
} 

int main(int argc, char *argv[]) { 
    xmlSAXHandlerPtr handler = calloc(1, sizeof(xmlSAXHandler)); 
    handler->startElement = start_element; 

    char * xml = "<site url=\"http://example.com/?a=b&amp;b=c\" />"; 

    xmlSAXUserParseMemory(handler, 
          NULL, 
          xml, 
          strlen(xml) 
); 
} 

PS:このメッセージは、実際にLibXML2 listから抽出された...と私は、このメールの最初の作者ではないが、私は気づいていますNokogiriAaron(ノコギリのメンテナー)がこのメッセージを実際に投稿しました。

答えて

5

このmessageは(私も持っていた)同じ問題を説明し、the responseはあなたを設定している場合、その手段は何

にエンティティを置き換えるために、パーサーを頼むと言いますコンテキストの場合は、次のようにオプションを設定します。

xmlParserCtxtPtr context = xmlCreatePushParserCtxt(&yourSAXHandlerStruct, self, NULL, 0, NULL); 
xmlCtxtUseOptions(context, XML_PARSE_NOENT); 
関連する問題