【发布时间】:2015-09-29 14:43:59
【问题描述】:
我正在使用几个 XML 文件,每个文件都有自己的处理程序类。每个类都有相同但只有一行的 loadXML 和 exportXML 函数。我想确定一种方法,每次为新 XML 创建新的处理程序类时不必复制和粘贴。
对于每个文件,我只是改变:
if(soap_read__gt__Library(&soap, &library) != SOAP_OK)
和
if(soap_write__gt__Library(&soap, &library) != SOAP_OK)
其中 gt 是命名空间,Library 是根节点。每个新的 XML 文件都有不同的命名空间和根节点。这些现在在编译之前,是否有自动将每个类加载/导出 XML 函数替换为其尊重的命名空间和根节点?
例如我使用命名空间 test 和 rootnode devConfig 创建了一个新的 xml。我想要一个用soap_read__test__devConfig和soap_write_test__devConfig替换load/exportXML的方法。
void LoadXML(struct soap& soap, _gt__Library& library, const string& strXMLPath)
{
ifstream fstreamIN(strXMLPath);
soap.is = &fstreamIN;
// calls soap_begin_recv, soap_get__gt__Library and soap_end_recv
if(soap_read__gt__Library(&soap, &library) != SOAP_OK)
{
std::cout << "soap_read__gt__Library() failed" << std::endl;
throw 1;
}
// patch
if(_setmode(_fileno(stdin), _O_TEXT) == -1)
{
std::cout << "_setmode() failed" << std::endl;
throw 1;
}
// ~patch
}
void exportXML(struct soap& soap, _gt__Library& library, const string& strXMLPath)
{
soap_set_omode(&soap, SOAP_XML_INDENT);
ofstream fstreamOUT(strXMLPath);
soap.os = &fstreamOUT;
// calls soap_begin_send, soap_serialize, soap_put and soap_end_send
if(soap_write__gt__Library(&soap, &library) != SOAP_OK)
{
std::cout << "soap_write__gt__Library() failed" << std::endl;
throw 1;
}
}
【问题讨论】: