The obvious bug I can see is that ParseXml expects zero terminated string, but you are loading the exact size from the file, without adding zero at the end.
Try
String xml = LoadFile(path);
if(xml.IsVoid()) return false;
instead of
FileIn iFile(path);
if(!iFile.IsOpen())
{
return false;
}
int len = (int)iFile.GetSize();
Buffer<char> pBuf;
pBuf.Alloc(len);
iFile.GetAll(pBuf,len);
iFile.Close();
String xml = ~pBuf;