2009-06-11 11 views
4

Ich habe (was ich denke) ein seltsames Verhalten bei der Verwendung des Sax Parsers festgestellt, und ich wollte wissen, ob es normal ist.LibXML2 Sax Parsing und kaufmännisches Und

ich dieses XML durch den SAX-Parser zu senden:

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

Die "&" wird umgewandelt in "&", wenn der startElement Rückruf genannt wird. Soll es das tun? Wenn ja, würde ich gerne verstehen warum.

Ich habe ein Beispiel demonstriert das Problem hier eingefügt:

#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: Diese Nachricht tatsächlich von den LibXML2 list extrahiert wird ... und ich bin nicht der ursprüngliche Autor dieser Mail, aber ich merkte, das Problem mit Nokogiri und Aaron (der Betreuer von Nokogiri) tatsächlich diese Nachricht selbst gepostet.

Antwort

5

Dieses message beschreibt das gleiche Problem (was ich auch hatte) und the response sagt

fragen der Parser Einheiten zu ersetzen Werte

Was das bedeutet, ist, wenn Sie Ihre einrichten Kontext, stellen Sie die Option wie folgt ein:

xmlParserCtxtPtr context = xmlCreatePushParserCtxt(&yourSAXHandlerStruct, self, NULL, 0, NULL); 
xmlCtxtUseOptions(context, XML_PARSE_NOENT); 
Verwandte Themen