CentOS - 解析XML文件时出错

时间:2017-01-31 10:10:03

标签: c xml encoding centos

我需要移植一个C应用程序,从RedHat(x86)到CentOS(x64)。应用程序读取XML文件,并使用。

进行一些数据库操作

在RedHat下,一切都很好,并按预期工作。但是在CentOS上,日志说该文件是有效的。

[31/01/2017 10:29:33]  -> Parsing file(file../lan/RLT_LTE.xml).

../lan/RLT_LTE.xml:1: parser error : Start tag expected, '<' not found
<?xml version="1.0" encoding="utf-8"?>
^
* ERREUR * Impossible to read data. The XML file isn't valid.

[31/01/2017 10:29:33] Error parsing XML file. Data won't be updated.

*** glibc detected *** fctc: munmap_chunk(): invalid pointer: 0x000000000041f9f0 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x75f4e)[0x7f79ffb23f4e]
fctc[0x4032dd]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x7f79ffaccd5d]
fctc[0x402b99]
======= Memory map: ========
[...]

当然,首先,我认为这是关于文件字符集。

cmd_usr:$: file -i RLT_LTE.xml
RLT_LTE.xml: application/xml; charset=utf-8

该文件好像是在好的字符集上。在我的代码中,这是函数读取文件。

int app_parsefile(char* xmlfile, char* xsdfile)
{
    xmlDoc *doc = NULL;
    xmlNode *root_element = NULL;
    xmlNode *cur_node = NULL;
    int res;

    doc = xmlReadFile(xmlfile, "utf-8", 0);
    if (doc == NULL)
    {
        fctc_error("Impossible to read data. The XML file isn't valid.\n");
        return EXIT_FAILURE;
    }

    /*
     * Validate the file.
     */
    if (xsdfile != NULL)
    {
        if ((res = validate(doc, xsdfile)) != 0)
        {
            fctc_error("File isn't valid on XSD : %s\n", xsdfile);
            return EXIT_FAILURE;
        }
    }

    root_element = xmlDocGetRootElement(doc);

    res = app_ParseTop(doc, root_element);

    xmlFreeDoc(doc);
    xmlCleanupParser();
    return res;
}

所以错误似乎来自doc = xmlReadFile(xmlfile, "utf-8", 0);行,但我不知道如何调试/解决这个问题。

当然,我检查了什么文档may possibly be,但没有真正的结果。  所以欢迎任何帮助

1 个答案:

答案 0 :(得分:0)

您是否尝试将RedHat盒上安装的工具与CentOS盒上安装的工具进行比较?我将从XML开始。

您可以在RedHat框中发出rpm -qa | grep xml(从我的理解应用程序工作正常)。

然后在那里找到安装的xml软件包,尝试将它们安装在CentOS盒子上。然后重新运行应用程序,看看你是否摆脱了这个错误。