-1

I am trying to port libxml2 to android.When I use file path with spaces (for example path = "/storage/emulated/0/sdcard/New XML.xml"), opening of xml file is failing.But if I use path without spaces(for example "/storage/emulated/0/sdcard/NewXML.xml". Parsing file is successful.Please help me how to resolve this issue.

Below is the sample code:

#include <stdio.h>
#include <libxml/xmlreader.h>

static void
processNode(xmlTextReaderPtr reader) {
    const xmlChar *name, *value;

    name = xmlTextReaderConstName(reader);
    if (name == NULL)
    name = BAD_CAST "--";

    value = xmlTextReaderConstValue(reader);

    printf("%d %d %s %d %d", 
        xmlTextReaderDepth(reader),
        xmlTextReaderNodeType(reader),
        name,
        xmlTextReaderIsEmptyElement(reader),
        xmlTextReaderHasValue(reader));
    if (value == NULL)
    printf("\n");
    else {
        if (xmlStrlen(value) > 40)
            printf(" %.40s...\n", value);
        else
        printf(" %s\n", value);
    }
}

static void streamFile(const char *filename) {
    xmlTextReaderPtr reader;
    int ret;

    reader = xmlReaderForFile(filename, NULL, 0);
    if (reader != NULL) {
        ret = xmlTextReaderRead(reader);
        while (ret == 1) {
            processNode(reader);
            ret = xmlTextReaderRead(reader);
        }
        xmlFreeTextReader(reader);
        if (ret != 0) {
            fprintf(stderr, "%s : failed to parse\n", filename);
        }
    } else {
        fprintf(stderr, "Unable to open %s\n", filename);
    }
}

int main() {
    const char path[64] = "/storage/emulated/0/sdcard/New XML.xml"

    streamFile(path);

    xmlCleanupParser();
    xmlMemoryDump();

    return(0);
}
Dima Kozhevin
  • 3,602
  • 9
  • 39
  • 52

2 Answers2

0

Encode your space ...

xmlReaderForFile filename: a file or URL

Khertan
  • 93
  • 7
0

You need to escape spaces in your filename. Try

    const char path[64] = "/storage/emulated/0/sdcard/New\ XML.xml"
Dmitrii Z.
  • 2,287
  • 3
  • 19
  • 29