【发布时间】: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<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文件。
【问题讨论】:
-
您应该看到两个输入之间的区别。我将文件路径和 xml 文件都视为错误消息中的一个字符串。这可能是问题所在。
-
当我打印 'xml_file' 时,我只得到 xml 文件的内容。我不明白这两种方法有什么区别。