如何在OMNeT ++中读写XML文档?

时间:2017-12-10 06:10:07

标签: xml omnet++

我想在我的OMNeT ++模拟中使用XML文件处理数据。阅读本手册后,我已经弄清楚如何使用OMNeT ++ API读取XML文件。但是,当我尝试在XML文件中写入内容时,这并不起作用。以下代码片段说明了我尝试做的事情:

cXMLElement *xmlPosture;
xmlPosture = par("traceFile").xmlValue();
cXMLElementList Entities = xmlPostureW->getElementsByTagName("Entity");
(*Entities[0]).setAttribute("X_Position", "100");
(*Entities[0]).setAttribute("Y_Position", "100");
(*Entities[0]).setAttribute("Z_Position", "100");

生成的XML文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <Entity id="0" X_Position="250" Y_Position="250" Z_Position="0" Speed="0.1">
    </Entity>
    <Entity id="1" X_Position="250" Y_Position="300" Z_Position="0" Speed="0.1">
    </Entity>
    <Entity id="2" X_Position="250" Y_Position="200" Z_Position="0" Speed="0.1">
    </Entity>
    <Entity id="3" X_Position="200" Y_Position="250" Z_Position="0" Speed="0.1">
    </Entity>
    <Entity id="4" X_Position="100" Y_Position="250" Z_Position="0" Speed="0.1">
    </Entity>
    <Entity id="5" X_Position="150" Y_Position="220" Z_Position="0" Speed="0.1">
    </Entity>
</root>

出于某种原因,我没有看到我写入文件的更改(请参阅上面的代码片段)。我做错了什么?

1 个答案:

答案 0 :(得分:2)

问题在于您实际上并没有更改文件,而只是修改XML文档的内部表示。你应该把它写到磁盘上。

如果我正确理解了您的问题的上下文,您就会尝试生成跟踪文件,以后可以使用XML格式的其他工具进行分析。如果是这种情况,您应该将您的XML文件写入OMNeT ++模块中的磁盘。 finish方法。问题是您正在使用OMNeT ++ cXML *类打开您的文件:这些仅用于配置目的,因此它们是只读的(参见例如this entry in the API documentation)。

因此,我建议你要么包含一个可以进行XML编写的库,要么转换为更简单的格式,如CSV或JSON(我个人使用rapidJSON导出为JSON格式,但这可能不是为你工作)。您也可以尝试使用OMNeT ++的统计框架来导出数据,但它并不是真正设计用于任意输出的,例如消息日志。

相关问题