xml问题,从IXMLDOMDocument接口内容到一个string中的问题

suokeng 2003-12-16 09:17:49
IXMLDOMDocument接口有一个方法save可以把内容保存到xml文件里,但是我不想这样
我想直接放入string中然后通过网络发送到客户端。如何解决???
...全文
113 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuxianzhi 2004-03-05
  • 打赏
  • 举报
回复
今天无意看到这个问题,猛然发现俺以前还回复过,楼主怎么还不结贴?
liuxianzhi 2003-12-26
  • 打赏
  • 举报
回复
上文说的有些问题,是修改WideCharToMultiByte函数的第一个参数,如下文,是ConvertBSTRToString函数的原型,如果真碰到编码的问题,你需要自己写一个ConvertBSTRToString函数,修改其中调用的WideCharToMultiByte函数的参数。

inline char* ConvertBSTRToString(BSTR pSrc)
{
if(!pSrc) return NULL;

DWORD cb,cwch = ::SysStringLen(pSrc);//convert even embeded NULL

char *szOut = NULL;

if(cb = ::WideCharToMultiByte(CP_UTF8, 0, pSrc, cwch + 1, NULL, 0, 0, 0))//CP_ACP
{
szOut = new char[cb];
if(szOut)
{
szOut[cb - 1] = '\0';

if(!::WideCharToMultiByte(CP_UTF8, 0, pSrc, cwch + 1, szOut, cb, 0, 0))//CP_ACP
{
delete []szOut;//clean up if failed;
szOut = NULL;
}
}
}

return szOut;
};
liuxianzhi 2003-12-26
  • 打赏
  • 举报
回复
"接放入string中然后通过网络发送到客户端"

你的问题是什么?
是如何把xml文件的内容放到string中,还是如何用网络发送string?

如果是前者,请参考我的代码,都是实践中的经验 :)


int CXMLManager::GetElementValue(CString &strElementValue)
{
USES_CONVERSION;

strElementValue = "";

//遍历当前元素节点的所有子节点,找到IXMLDOMText节点(如果有)
//并读出其值.
if (pCurNode != NULL)
{

MSXML2::IXMLDOMNodeList *pTempNodeList = NULL;
MSXML2::IXMLDOMNode *pTempNode = NULL;
long lTemp;

hrErr = pCurNode->get_childNodes(&pTempNodeList);
if (hrErr == S_OK)
{
pTempNodeList->get_length(<emp);
for (int i=0;i<lTemp;i++)
{
BSTR bszTemp;
CString strTemp;
pTempNodeList->get_item((long)i,&pTempNode);
if (pTempNode != NULL)
{
pTempNode->get_nodeTypeString(&bszTemp);
strTemp = OLE2A(bszTemp);
if (strTemp.Compare("text") == 0)
{
VARIANT vtElementValue;
vtElementValue.vt = VT_EMPTY;
pTempNode->get_nodeValue(&vtElementValue);
//在这里把BSTR转换为CString数据:
strElementValue = OLE2A(vtElementValue.bstrVal);
或者用下面的这一行,尤其是当你碰到不同编码问题时(如BSTR中使Unicode的),可以通过修改ConvertBSTRToString()函数的第一个参数解决:
//strElementValue = _com_util::ConvertBSTRToString(vtElementValue.bstrVal);
}
}
}

CheckAndRelease(pTempNode);
CheckAndRelease(pTempNodeList);

if (strElementValue.Compare("") == 0)
return 0;

return 1;
}

return 0;
}

return 0;
}
mahatma_cn 2003-12-18
  • 打赏
  • 举报
回复
或者pXMLDom->get_xml(&bstr);
mahatma_cn 2003-12-18
  • 打赏
  • 举报
回复
直接用QueryInterface查询IXMLDOMDocument的IStream接口,之后直接用IStream中的方法。
蒋晟 2003-12-17
  • 打赏
  • 举报
回复
1 查询IXMLDOMDocument对象的IXMLDOMDocument [MS XML]接口,如果成功获得,访问其xml属性
2 查询IXMLDOMDocument对象的IPersistStream接口,如果成功获得,建立一个内存Stream(COleStreamFile就是一个),然后用IPersistStream::Save写到内存Stream

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧