我有一个用iNotify监视的文件夹。当在文件夹中创建文件时,观察者获取文件,重命名它(使用mv),然后将其移动到另一个文件夹。然后使用bash脚本调用RapidXML程序,并假设解析文件的XML内容。在RapidXML程序脚本调用之后,iNotify程序也会重新启动。
因此,当我自己运行RapidXML程序时,它会解析文件并完成应有的一切。但是,当我运行观察程序并将一个XML文件放在监视目录中时,它被检测到,它被重命名,它被移动但是RapidXML程序冻结或踢出(不确定哪一个)在
doc.parse<0>(&buffer[0]);
线。
以下是RapidXML程序的代码部分:
#include "xmlparser.h"
using namespace std;
using namespace rapidxml;
int main(int argc, char * argv[])
{
//variable declaration left out for space purposes
xml_document<> doc;
xml_node<> * root_node;
ifstream theFile("config.xml");
vector<char> buffer((istreambuf_iterator<char>(theFile)), istreambuf_iterator<char>());
buffer.push_back('\0');
doc.parse<0>(&buffer[0]);
// find the root node
root_node = doc.first_node("configuration");
// iterate over the deltas
xml_node<> * deltas_node = root_node->first_node("deltas");
svn = boost::lexical_cast<double>(deltas_node->first_attribute("svn")->value());
svd = boost::lexical_cast<double>(deltas_node->first_attribute("svd")->value());
... //other variable assignments
xml_node<> * report_node = deltas_node->next_sibling("report");
optime = boost::lexical_cast<int>(report_node->first_attribute("optime")->value());
opstatusa = boost::lexical_cast<int>(report_node->first_attribute("opstatusa")->value());
... // other variable assignments
xml_node<> * timing_node = report_node->next_sibling("timing");
timing = boost::lexical_cast<int>(timing_node->first_attribute("timing"));
... // then I do some SQL stuff with the mysql cpp connector.
任何人都知道为什么在使用脚本调用时不想解析XML文件?
答案 0 :(得分:1)
似乎你想使用doc.parse&lt; 0&gt;命令,你必须指定文件的完整路径名,所以在我的情况下:
ifstream theFile("/home/root/xmlparser/config.xml");