首页 > 解决方案 > 错误:无法打开主文档实体

问题描述

我正在尝试使用 xerces 库在我的 c++ 程序中解析一个 xml 文件(我在 xsd 中也有模式定义)。为了让事情开始,我编写了一个小程序,我只是用 xml 文件初始化 std::unique_pointer。如果我在初始化时使用包含 xml 文件的 std::string 对象,则会收到以下错误,而如果我直接使用 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]));then 程序运行良好(我提供 xml 文件的路径作为命令行输入。)

我收到以下错误:

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

上面的错误语句后面跟着xml文件。

标签: c++11xerces-c

解决方案


在我将 XML 文件的位置存储在字符串对象中而不是其中的 XML 文件的全部内容之后,问题就解决了。即现在我的 std::string xml_file = path_to_xml_file;


推荐阅读