在C ++中用XML调用函数

时间:2013-01-02 11:31:04

标签: c++ xml parsing events signals

我打算将XML解析添加到我正在处理的项目中。这将需要允许软件不仅加载和保存设置,还需要在需要时调用功能。

我可以看到加载和保存设置不是问题,但是,需要触发的异步事件可能有点棘手。

将远程驱动应用程序,并且需要触发事件,例如开始播放。这应该使用XML来完成。

我可以看到这样做的一种方式如下所示。对于每个元素,XML将包含Settings和Signals。对于加载和保存,不需要信号,只需要设置。但是,如果需要调用信号,则其值将设置为1并且时钟将被切换。

<SomeElement>
  <Settings>
    <setting1 value="1"/>
    <setting2 value="2"/>
  </Settings>
  <Signals>
    <clock value="0"/>
    <Signal1 value="1"/>
  </Signals>
</SomeElement>

这看起来是实现这一目标的合理方式,还是有一种我不知道的更简单/更好的方式。

我目前计划使用pugixml作为XML解析器,但是,我很可能会围绕它编写一个包装器。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

首先:除非您的设置和信号被视为纯文本,否则您上面提供的“XML”并不是真正有效的XML。否则你必须使用类似的东西:

<Settings>
    <setting name="setting1" value="1" />
    <setting name="setting2" vakue="2" />
</Settings>

此外,如果您需要按特定顺序读取XML文件的元素,那么您不是在谈论XML,而是看起来像XML的纯文本 - XML标准确实需要在它们在文件中找到相同的顺序(仅保留级别结构)。所以你可能会在“setting1”和“clock”之前的“signal”之前读取“setting2”。要维护某个订单,您需要使用一些可以排序的“排序”属性。

我要做的是构建某种“动作列表” - 要做的事情列表(设置设置或启动动作)并填写解析XML文件的列表。然后,我会遍历列表并执行动作告诉我的操作。

但是,这绝不会标题为“用C ++中的XML调用函数”(这是不可能的,因为XML不会像程序运行那样“运行”)。