c++11 - 错误:无法打开主文档实体
问题描述
我正在尝试使用 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文件。
解决方案
在我将 XML 文件的位置存储在字符串对象中而不是其中的 XML 文件的全部内容之后,问题就解决了。即现在我的 std::string xml_file = path_to_xml_file;
推荐阅读
- c - GetProcessTimes ExitTime 来自未提升的进程
- python - 无法将大小为 12212 的数组重塑为形状 (400,400,180)
- oracle - 即使我在 OracleConfiguration 中定义了路径,Oracle 也会给出错误 12154
- asp.net - 如何以编程方式使 GridView 中的字段与 AutoGenerateEditButton 一起可编辑?
- parsing - 朱莉娅:可以(应该)在“解析时间”捕获这种类型的错误吗?
- javascript - RxJS:为什么内部可观察首先触发?
- r - 限制data.frame中的列超过条件
- android - 从三星 S10 Android 手机开始时,应用程序未在 Google Play 商店中列出
- python - 访问在本地 HTTP 主机上运行的视频流
- python - 私人聊天消息 django 如 facebook