Моя проблема заключается в том, что, используя ogr2ogr, я разбираю файл shp в gml.Проанализируйте файл GML (из shp one) в C
Затем я хочу разобрать этот файл в моей функции C.
sprintf(buffer, "PATH=/Library/Frameworks/GDAL.framework/Programs:$PATH:/usr/local/bin ogr2ogr -f \"GML\" files/Extraction/coord.gml %s", lectureFichier);
system(buffer);
sprintf(buff, "sed \"2s/.*/\\<ogr:FeatureCollection\\>/\" files/Extraction/coord.gml | sed '3,6d' > files/Extraction/temp.xml");
system(buff);
FILE *fichier = NULL;
FILE *final = NULL;
fichier = fopen("files/Extraction/temporaire.csv", "w+");
xmlDocPtr doc;
xmlChar *xpath = (xmlChar*) "//keyword";
xmlNodeSetPtr nodeset;
xmlXPathContextPtr context;
xmlXPathObjectPtr result;
int i;
doc = xmlParseFile("files/Extraction/temp.xml");
Когда я выполнить программу, у меня есть ошибки для каждой строки из-за префикса пространства имен (GML или OGR), которые не определены)
Пример temp.xml
<ogr:FeatureCollection>
<gml:boundedBy>
<gml:Box>
<gml:coord><gml:X>847001.4933830451</gml:X><gml:Y>6298087.567566251</gml:Y></gml:coord>
<gml:coord><gml:X>859036.8755179688</gml:X><gml:Y>6309720.622619263</gml:Y></gml:coord>
</gml:Box>
</gml:boundedBy>
<gml:featureMember>
У вас есть идея, как заставить программу знать это новое пространство имен?
EDIT:
xmlDocPtr doc;
xmlChar *xpath = (xmlChar*) "//keyword";
xmlNodeSetPtr nodeset;
xmlXPathContextPtr context;
xmlXPathRegisterNs(context, "ogr", "http://ogr.maptools.org/");
xmlXPathRegisterNs(context, "gml", "http://www.opengis.net/gml");
xmlXPathObjectPtr result;
int i;
doc = xmlParseFile("files/Extraction/temp.xml");
if (doc == NULL) {
fprintf(stderr,"Document not parsed successfully. \n");
return 0;
}
context = xmlXPathNewContext(doc);
if (context == NULL) {
printf("Error in xmlXPathNewContext\n");
return 0;
}
xpath = "//gml:coordinates/text()";
result = xmlXPathEvalExpression(xpath, context);
xmlXPathFreeContext(context);
if (result == NULL) {
printf("Error in xmlXPathEvalExpression\n");
return 0;
}
if(xmlXPathNodeSetIsEmpty(result->nodesetval)){
xmlXPathFreeObject(result);
printf("No result\n");
return 0;
}
`
При добавлении, что вы дали мне, я с сегм Fault, и я действительно не знаю, откуда это, но мне кажется, я» м ближе к ответу.
У вас есть идея, когда я не в порядке?
На самом деле, СЭД сценарий Я использую это для удаления содержимого, потому что кажется, что, когда я пытаюсь разобрать файл gml, первый узел становится пустым –
user2550416
Почему в примере temp.xml, который вы показали в своем вопросе, ', если sed-скрипт удалил его? –
Сценарий Sed делелирует содержимое '' Фактически первый файл содержит: '' Но, похоже, все равно, несмотря на ошибки, я ждал завершения выполнения, и созданный файл хороший, но лучше будет без ошибки. Если кто-то знает? Спасибо в любом случае James Holderness :) –
user2550416