无法从 XML 文件中获取值
Cannot get values from XML files
我在从XML文件中获取值并使用.cc类中的值时遇到问题。
我有一个看起来像这样的XML文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<heatSupplyLoadProfile>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 38.0160000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 50.6880000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 114.0480000 </param>
<param> 114.0480000 </param>
<param> 114.0480000 </param>
<param> 114.0480000 </param>
<param> 76.0320000 </param>
<param> 76.0320000 </param>
<param> 76.0320000 </param>
<param> 76.0320000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 101.3760000 </param>
<param> 114.0480000 </param>
<param> 114.0480000 </param>
<param> 114.0480000 </param>
<param> 114.0480000 </param>
<param> 76.0320000 </param>
<param> 76.0320000 </param>
<param> 76.0320000 </param>
<param> 76.0320000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 63.3600000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 25.3440000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
<param> 12.6720000 </param>
</heatSupplyLoadProfile>
我的 DataCenter.cc 类应该按如下方式工作。 我想获取每个参数,看看参数是否大于 0.0,如果是应该创建一条消息(数据中心热消息(。此外,应发送自我信息。 DataCenter.cc 类如下所示:
#include "DataCenter.h"
namespace network {
Define_Module(DataCenter);
void DataCenter::initialize()
{
//Get param XMLElectricity file from simple module
heatSupplyLoadProfileArray = &par("heatSupplyLoadProfileArray");
XMLElectricity = electrictySupplyLoadProfileArray->xmlValue();
//Get values of the XML File
for(childNodeHeat = XMLHeat->getFirstChildWithTag("heatSupplyLoadProfile"); childNodeElectricity; childNodeElectricity = XMLHeat->getNextSiblingWithTag("heatSupplyLoadProfile")){
const char* valueHeat = childNodeHeat->getNodeValue();
//Convert the node value from string to double
heatSupplyLoadProfileArrayValue = atof(valueHeat);
if(heatSupplyLoadProfileArrayValue > 0.0){
DataCenterHeatMessage = new cMessage("heatSupplyLoadProfileArray");
endTxEvent = new cMessage("send/endTx");
scheduleAt(0, endTxEvent);
}
}
}
void DataCenter::handleMessage(cMessage *msg)
{
// Check if self message is received
if(endTxEvent->isSelfMessage()){
if(electricitySupplyLoadProfileArrayValue > 0.0){
send(DataCenterHeatMessage, "outDataCenterHeat");
}
}
else {
throw cRuntimeError("self-message not delivered");
}
}
};
数据中心.h:
#ifndef __VISIONSIMULATIONOFPED_DATACENTER_H_
#define __VISIONSIMULATIONOFPED_DATACENTER_H_
#include <omnetpp.h>
using namespace omnetpp;
namespace network {
class DataCenter : public cSimpleModule {
protected:
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
private:
//state variables
double heatSupplyLoadProfileArrayValue;
cXMLElement *XMLHeat;
cXMLElement *childNodeHeat;
cPar *heatSupplyLoadProfileArray;
};
}; //namespace #endif
不幸的是,该消息未发送到我声明的模块。 我发现这与 for 循环有关。根本不输入 for 循环。如果我注释掉属于从 XML 文件中获取值的行,模拟将发送消息。此外,如果我构建项目,则不会发生错误。
请有人帮我解决这个问题吗? 提前感谢!
假设在DataCenter.ned
中有以下声明:
xml heatSupplyLoadProfileArray;
omnetpp.ini
包含:
**.heatSupplyLoadProfileArray = xmldoc("heat.xml")
其中heat.xml
是一个包含以下内容的文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<heatSupplyLoadProfile>
<param> 12.6720000 </param>
<param> 76.0320000 </param>
<param> 114.0480000 </param>
</heatSupplyLoadProfile>
要从此 XML 文件中读取数据,应使用以下代码:
cXMLElement *rootelement = par("heatSupplyLoadProfileArray");
cXMLElementList params= rootelement->getChildrenByTagName("param");
for (const auto & element : params) {
const char* valueHeat = element->getNodeValue();
float val = atof(valueHeat);
EV << "Read value: " << val << std::endl;
if (val > 0.0) {
// send a message or self-message
}
}
相关文章:
- 获取文件数据预处理器宏
- 如何在Windows内核中获取文件大小
- 从 C 中的变量获取文件的路径,C++
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- 如何使用 jpeglib.h 获取文件是否为 JPEG 类型
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 我需要通过窗口句柄(HWND)获取文件,我该怎么办?
- 如何用C++部分地获取文件中的行
- 使用内置的Windows方法获取文件夹的内容
- 在 Apache Velocity 模板语言中获取文件目录
- 如何在C#或C++中获取文件或文件夹的有效权限?有什么 API 吗?
- 对字符求和并减去以获取文件
- 从 FutureAccessList 同步获取文件夹路径
- 通过HTTPS从POCO StreamCopier获取文件下载进度
- 如何使用C 17获取文件大小
- getline 无法获取文件的第一行
- 如何使用 Win API 获取文件夹中的文件列表(带过滤器)
- 无法从零MQ ZMQ_SERVER套接字中获取文件描述符
- HttpQueryInfo 获取文件大小
- 通过文件资源管理器获取文件夹目录