C:
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
void
parseStory (xmlDocPtr doc, xmlNodePtr cur) {
xmlChar *key;
cur = cur->xmlChildrenNode;
while (cur != NULL) {
if ((!xmlStrcmp(cur->name, (const xmlChar *)"DE_DE"))) {
key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
puts("\t<word>");
fputs("\t\t<DE_DE>",stdout);
fputs(key,stdout);
puts("</DE_DE>");
puts("\t</word>");
xmlFree(key);
}
cur = cur->next;
}
return;
}
static void
parseDoc(char *docname) {
xmlDocPtr doc;
xmlNodePtr cur;
doc = xmlParseFile(docname);
if (doc == NULL ) {
fprintf(stderr,"Document not parsed successfully. \n");
return;
}
cur = xmlDocGetRootElement(doc);
if (cur == NULL) {
fprintf(stderr,"empty document\n");
xmlFreeDoc(doc);
return;
}
if (xmlStrcmp(cur->name, (const xmlChar *) "picturemaxx_dictionary")) {
fprintf(stderr,"document of the wrong type, root node != picturemaxx_dictionary");
xmlFreeDoc(doc);
return;
}
cur = cur->xmlChildrenNode;
while (cur != NULL) {
if ((!xmlStrcmp(cur->name, (const xmlChar *)"word"))){
parseStory (doc, cur);
}
cur = cur->next;
}
xmlFreeDoc(doc);
return;
}
int
main(int argc, char **argv) {
char *docname;
if (argc <= 1) {
printf("Usage: %s docname\n", argv[0]);
return(0);
}
puts("<?xml version=\"1.0\"?>\n<picturemaxx_dictionary dictonary=\"dictionary_de_de_en_en\">\n");
docname = argv[1];
parseDoc (docname);
puts("</picturemaxx_dictionary>\n");
return (1);
}
Nicht aufregen, das war nur ein mal-kucken-wie-schnell-C-ist-HACK.
Und hier PHP:
PHP-Code:
<?php
if (file_exists('dictionary_de_de_en_en.xml')) {
$xml = simplexml_load_file('dictionary_de_de_en_en.xml');
$fd = fopen("deutsch.txt","w");
if($fd) {
for($i=0;$xml->word[$i]->DE_DE;$i++) {
fputs($fd,$xml->word[$i]->DE_DE . "\r\n");
}
fflush($fd);
}
} else {
exit('Konnte Datei nicht laden.');
}
?>
Bei der ganzen Geschichte ging es darum, aus einem deutsch-englisch-Wörterbuch, welches 14MB gross war, alle deutschen Wörter zu extrahieren. Bei dem C-Programm sogar noch in XML.
Ich glaube das einzigste Argument, welches für PHP spricht, ist das es überall und billig verfügbar ist.
Frohe Ostern
Lesezeichen