Frage

Ich versuche, herauszufinden, wie die neueste geografische Breite und Länge eines Twitter-Nutzer zu erhalten (von den neuen API-Daten Geo, dh den <geo:point> Tag, können Sie sehen, wie sie auf my twitter Benutzer Timeline xml feed ). Ich muß auch abrufen, wie alt die Daten (in Sekunden) von dem <created_at>-Tag sind.

Ich versuche, dies in C zu schreiben, mit einem mbed Mikrocontroller so kann ich keine großen verwenden Bibliotheken (im Idealfall würde ich keine Bibliotheken verwenden, aber das ist vielleicht eine schlechte Idee). Die mbed-Website schlägt wenige Licht Bibliotheken - bei Farnell für £ 32 auf Lager und auf jeden Fall das Geld wert!)

War es hilfreich?

Lösung

Angenommen, Sie sämtliche Futtermittel in Erinnerung haben, würde schreibe ich eine sehr grobe und einfache Parser.

Als erstes würde ich ein hohes Maß tokenizer schreiben. Diese tokenizer zurückkehren würden zwei Arten von Token. XML-Tags und andere

Wenn Sie also als XML Quelle zur Verfügung:

<tag arg="stuff">
    <tag2>data</tag2>
</tag>

That would return "<tag arg="stuff">" as the first token, "
    " (note newline) in the second token, "<tag2>" in the third, "data" in the forth.

So etwas wie folgt aus:

char *p = bufPtr;
char *start = p;
char *token;
char target;

if (*p == '<') {
    // found the start of a tag, lets look for the end
    target = '>';
} else {
    // not in a tag, so we'll search for one
    target = '<';
}
p++;
while (*p != target) {
    p++;
}
int length = p - start;
result = malloc(length + 1);
memcpy(result, start, length);
*(token + length) = '\0'; // terminate result string
bufPtr = p; // advance for the next token

(Vorbehalt, meine C rostig ist, kann es durchaus einige einmalige Fehler in hier sein, aber das Wesentliche ist gut.)

Nun, da ich diese Meta-Stücke des XML bin immer, es ist einfach.

Ich Token nur scannen, bis ich einen sehe, die mit Ihrem Geo-Tag beginnt. Wenn Sie diese sehen, Sie „wissen“ das nächste Token Ihre lat / long-Daten sind. Schnappen Sie, dass, analysiert es (vielleicht mit sscanf), um Ihre Werte zu erhalten.

Was dies bedeutet effektiv Sie XML Raum abzuflachen. Sie kümmern sich nicht wirklich, wie tief der Tag ist, und Sie wirklich egal, es ist gut ausgebildet, oder irgendetwas. Sie sind so ziemlich vorausgesetzt, es ist gut ausgebildet und entsprechen.

Von der Spitze von meinem Kopf, ich weiß nicht, ob XML die Zeichen innerhalb eines angegebenen Tag-Attribut erlaubt, aber selbst wenn es es nicht zulässt, stehen die Chancen gut, dass diese spezifische XML nicht der Fall, so ist es ll Arbeit. Andernfalls müssen Sie zitierte Zeug (nicht, dass es sehr viel schwieriger, aber ...) analysieren.

Ist das robust? Auf keinen Fall. Sehr GIGO empfindlich. Aber eine einfache Prüfung sicherstellen, dass Sie die Puffer Ende nicht ablaufen sollten Sie es speichern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top