Ошибка: невозможно открыть первичный объект документа - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь проанализировать xml-файл (у меня также есть определение схемы в xsd) в моей программе на c ++ с использованием библиотеки xerces. Для начала я написал небольшую программу, в которой я просто инициализирую std :: unique_pointer файлом xml. Я получаю следующую ошибку, если при инициализации использую объект std :: string, содержащий файл xml, тогда как программа работает нормально, если я использую файл xml напрямую для инициализации.

Основная программа выглядит следующим образом:

#include <stdio.h>
#include <iostream>
#include "ShDataTypeRel15.hxx"
#include<fstream>
#include<string>

using namespace std;

int main (int argc, char* argv[])
{
   try
    {

fstream t("/home/vishal/UDA_XML/ShDataTypeRel15.xml", ios::in);
stringstream buffer;
buffer << t.rdbuf();

std::string xml_file = buffer.str();

        std::unique_ptr<tSh_Data> Shdata(Sh_Data(xml_file));

    }
      catch (const xml_schema::exception& e)
      {
              cout <<"Exception caught"<<std::endl;
          std::cerr << e << std::endl;
          return 1;
      }


return 0;
}

Когда я заменяю std::unique_ptr<tSh_Data> Shdata(Sh_Data(xml_file)); на std::unique_ptr<tSh_Data> Shdata(Sh_Data(argv[1]));, тогда программа работает нормально (я указываю путь к XML-файлу в качестве ввода командной строки.)

Я получаю следующую ошибку:

Exception caught
:0:0 error: unable to open primary document entity '/home/vishal/UDA_XML/<?xml version="1.0"?>

За указанным выше сообщением об ошибке следует файл xml.

1 Ответ

0 голосов
/ 18 сентября 2018

Проблема была решена после того, как я сохранил местоположение своего XML-файла в строковом объекте вместо всего содержимого этого XML-файла в нем.т.е. теперь мой std :: string xml_file = path_to_xml_file;

...