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

How can I read and write XML documents in OMNeT++?

我想使用 XML 文件来处理我的 OMNeT++ 模拟中的数据。阅读手册后,我弄清楚了如何使用 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>

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

问题是您实际上并没有更改文件,您只是在修改 XML 文档的内部表示。您实际上应该将其写入磁盘。

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

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