【问题标题】:Error: unable to open primary document entity错误:无法打开主文档实体
【发布时间】:2018-09-18 11:49:58
【问题描述】:

我正在尝试使用 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&lt;tSh_Data&gt; Shdata(Sh_Data(xml_file)); 替换为 std::unique_ptr&lt;tSh_Data&gt; 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文件。

【问题讨论】:

  • 您应该看到两个输入之间的区别。我将文件路径和 xml 文件都视为错误消息中的一个字符串。这可能是问题所在。
  • 当我打印 'xml_file' 时,我只得到 xml 文件的内容。我不明白这两种方法有什么区别。

标签: c++11 xerces-c


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-18
    • 2016-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多