我正在使用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文件?

最佳答案

看来,如果要使用doc.parse 命令,则必须指定文件的完整路径名,因此在我的情况下:

ifstream theFile("/home/root/xmlparser/config.xml");

关于c++ - 使用脚本调用时,RapidXML无法解析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20568672/

10-13 07:43