2017-01-31 166 views
0

我需要从RedHat(x86)移植到CentOS(x64)的C应用程序。该应用程序读取一个XML文件,并使用一些数据库操作。CentOS - 解析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,但没有真正的结果。 因此,任何帮助将受到欢迎

回答

0

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

你可以在RedHat盒子上发出rpm -qa | grep xml(从我理解的应用程序工作得很好)。

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

+0

你好。感谢您的提示。你说得对,libs根本就不一样。 RedHat有一些旧的库,还有一些CentOS没有。不幸的是,我无法安装它们,因为我没有在服务器上获得任何权限。 –

+0

那么你可以问一个有权安装它们的人,或者你可以在某个地方使用一个免费的虚拟机(比如亚马逊或谷歌云)。安装CentOS,并尝试使其工作,并看到你可能需要什么库 –