Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi libxml2 xmlParseFile无法加载格式正确的XML_Delphi_File_Xml Parsing_Delphi Xe_Libxml2 - Fatal编程技术网

Delphi libxml2 xmlParseFile无法加载格式正确的XML

Delphi libxml2 xmlParseFile无法加载格式正确的XML,delphi,file,xml-parsing,delphi-xe,libxml2,Delphi,File,Xml Parsing,Delphi Xe,Libxml2,作为libxml2的新手,我不明白为什么xmlParseFile总是返回nil uses libxml2; procedure TForm1.FormCreate(Sender: TObject); var doc: xmlDocPtr; begin doc := xmlParseFile('1.xml'); // doc is nil doc := xmlParseFile('c:\1.xml'); // doc is again nil end; 示例1.xml: <

作为libxml2的新手,我不明白为什么xmlParseFile总是返回nil

uses
  libxml2;

procedure TForm1.FormCreate(Sender: TObject);
var
  doc: xmlDocPtr;
begin
  doc := xmlParseFile('1.xml'); // doc is nil
  doc := xmlParseFile('c:\1.xml'); // doc is again nil
end;
示例1.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
</root>

所有的荣誉都归雷米所有,我会把答案而不是他放在这个问题上:

将Delphi包装器从PChar(在XE和XE2中是PWideChar)更改为PAnsiChar解决了这个问题。一旦函数的定义更改为

function xmlParseFile (const filename: PWideChar) : xmlDocPtr; cdecl; 
external LIBXML2_SO; 

这很好。

所有的功劳都归雷米所有,我将用答案代替他来结束这一切:

将Delphi包装器从PChar(在XE和XE2中是PWideChar)更改为PAnsiChar解决了这个问题。一旦函数的定义更改为

function xmlParseFile (const filename: PWideChar) : xmlDocPtr; cdecl; 
external LIBXML2_SO; 

我在github上创建了一个项目


修复了Delphi XE2上的一些编码错误。(PChar->PAnsiChar)

我在github上创建了一个项目


修复了Delphi XE2上的一些编码错误。(PCHAR -PANSICHAR)

我在C++中使用LIXXML2多年没有任何问题,所以我不得不怀疑LIXXML2的Delphi绑定可能会有问题。libxml2.pas中如何声明
xmlParseFile()
?实函数需要一个
PAnsiChar
作为输入。libxml2.pas是否声明
xmlParseFile()
使用
PAnsiChar
?这在Delphi XE中很重要,因为本地字符串类型是Unicode而不是Ansi。您是对的,将Delphi包装器从PChar(在XE和XE2中是PWideChar)更改为PAnsiChar解决了问题。一旦函数的定义更改为函数xmlParseFile(const filename:PChar):xmlDocPtr;cdecl;外部LIBXML2_SO;它工作得很好。RMY请您评语,我很乐意接受。我已经在C++中使用LIXXML2多年了,没有任何问题,所以我不得不怀疑LIXXML2的Delphi绑定可能会有问题。libxml2.pas中如何声明
xmlParseFile()
?实函数需要一个
PAnsiChar
作为输入。libxml2.pas是否声明
xmlParseFile()
使用
PAnsiChar
?这在Delphi XE中很重要,因为本地字符串类型是Unicode而不是Ansi。您是对的,将Delphi包装器从PChar(在XE和XE2中是PWideChar)更改为PAnsiChar解决了问题。一旦函数的定义更改为函数xmlParseFile(const filename:PChar):xmlDocPtr;cdecl;外部LIBXML2_SO;它工作得很好。雷米,请你给我一个答案,我很乐意接受。