不知道你有并模没有安装优酷客户端,他就是这么做的。
很偶然的被我看到了,打开xml文件,就可老肆以看到他的数据格式。
用VC吧,下面有一个例子,你参照下:
void CreateXml(){
CoInitialize(NULL)
// 创建文档
MSXML2::IXMLDOMDocument2Ptr pXMLDoc = NULL
//创建DOMDocument对象
HRESULT hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument))
敬握 if (!SUCCEEDED(hr))
{
return
}
// Create the Processing Instruction
MSXML2::IXMLDOMProcessingInstructionPtr pXMLProc = NULL
pXMLProc = pXMLDoc->createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
_variant_t vNullVal
vNullVal.vt = VT_NULL
pXMLDoc->insertBefore(pXMLProc, vNullVal)
// 创建根结点
_variant_t varNodeType((short)MSXML2::NODE_ELEMENT)
MSXML2::IXMLDOMNodePtr pXMLNodeRoot= NULL
pXMLNodeRoot = pXMLDoc->createNode(varNodeType, _T("Cases"), _T(""))
// 添加根结点
pXMLDoc->appendChild(pXMLNodeRoot)
// 创建并添加下级结点
MSXML2::IXMLDOMNodePtr pXMLNodeNode= NULL
pXMLNodeNode = pXMLNodeRoot->appendChild(pXMLDoc->createElement(_T("Case")))
// 创建下级元素结点
MSXML2::IXMLDOMElementPtr pXMLEle = NULL
pXMLEle = pXMLDoc->createElement(_T("CopyFile"))
// 创建并设置下级结点属性
MSXML2::IXMLDOMAttributePtr pXMLAttr = NULL
pXMLAttr = pXMLDoc->createAttribute(_T("src"旅稿裂))
pXMLAttr->nodeTypedValue = "C:\\test.txt"
pXMLEle->attributes->setNamedItem(pXMLAttr)
pXMLAttr = pXMLDoc->createAttribute(_T("dest"))
pXMLAttr->nodeTypedValue = "D:\\Test.txt"
pXMLEle->attributes->setNamedItem(pXMLAttr)
// 添加元素结点
拆闭 pXMLNodeNode->appendChild( pXMLEle)
MSXML2::IXMLDOMElementPtr pXMLEle1 = NULL
pXMLEle1 = pXMLDoc->createElement(_T("DelFile"))
pXMLEle1->appendChild(pXMLDoc->createTextNode("C:\\test.txt"))
// 添加元素结点
pXMLNodeNode->appendChild( pXMLEle1)
// 保存文档
pXMLDoc->save(_T("d:\\Test.xml"))
}
效果如下:
<?xml version="1.0" encoding="UTF-8" ?>
<Cases>
<Case>
<CopyFile src="C:\test.txt" dest="D:\Test.txt" />
<DelFile>C:\test.txt</DelFile>
</Case>
</Cases>
为了能够让MFC认识MSXML2,我们需要引入相应的dll,代码如下
#import "msxml4.dll"
gsoap中想要输出多个不同类型的参数只能使用结构体的方稿腊高法,自定义一个结构局者体,在结构体中定义想要的输出的类型和参数,在当然必须在头文件中定义
然后用soapcpp2工具编译此头文件会生成相关的soap_out_TYPE,soap_put_TYPE,soap_serialize_TYPE等函数
实际上这几个函数的实现也是调用了相关类型的函数实现的,比如结构体中包含字符串,那么soap_serialize_TYPE就会调用soap_serialize_string函数键尺实现
如下代码
[cpp] view plain copy
struct LogInfo loginfo={"哈哈",1}
soap_serialize_LogInfo(soap,&loginfo)
soap_put_LogInfo(soap, &loginfo, "logs", NULL)
页面会输出:
[html] view plain copy
<?xml version="1.0" encoding="UTF-8"?>
<logs>
<content>hehe</content>
<id>1</id>
</logs>
多次调用soap_out_LogInfo函数
[cpp] view plain copy
soap_serialize_LogInfo(soap,&loginfo)
soap_out_LogInfo(soap, "logs",1, &loginfo, NULL)
soap_out_LogInfo(soap, "logs",2, &loginfo, NULL)
页面会输出
[html] view plain copy
<?xml version="1.0" encoding="UTF-8"?>
<logs id="_1">
<content>hehe</content>
<id>1</id>
</logs>
<logs id="_2">
<content>hehe</content>
<id>1</id>
</logs>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)