求助,在VC++中用什么解析xml?
收到JAVA程序发过来的一串XML,
VC++中有什么可以解析xml的?非常感谢!!!!
问题点数:100、回复次数:15Top
1 楼banjo(3天看问题)回复于 2004-09-04 16:46:22 得分 10
msxml
微软的开发包,支持dom和saxTop
2 楼stevens2009(风)回复于 2004-09-04 17:16:24 得分 0
怎么用呢?有没有示例Top
3 楼flyelf(空谷清音)回复于 2004-09-04 21:16:28 得分 10
ibm xml4cTop
4 楼__A__(無羈の心)回复于 2004-09-05 05:44:47 得分 50
//AaaaDlg.h
#import <msxml.dll> named_guids
using namespace MSXML;
class CAaaaDlg : public CDialog
{
......
protected:
CTreeCtrl m_TreeCtrl;
MSXML::IXMLDOMDocumentPtr m_plDomDocument;
MSXML::IXMLDOMElementPtr m_pDocRoot;
......
};
//AaaaDlg.cpp
BOOL CAaaaDlg::OnInitDialog()
{
......
// TODO: 在此添加额外的初始化代码
//Initialize COM
::CoInitialize(NULL);
HRESULT hr =
m_plDomDocument.CreateInstance(MSXML::CLSID_DOMDocument);
if( FAILED(hr))
{
_com_error er(hr);
AfxMessageBox(er.ErrorMessage());
EndDialog(1);
}
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
void CAaaaDlg::OnBnClickedOk()
{
CFileDialog fileDlg(TRUE);
if(IDOK == fileDlg.DoModal())
{
m_TreeCtrl.DeleteAllItems();
CString strFileName=(fileDlg.GetPathName());
//Convert XML file name string to somethinf
//COM can handle(bstr)
_bstr_t bstrFileName;
bstrFileName = strFileName.AllocSysString();
//Call the IXMLDOMDocumentPtr's load function
//to load the XML document.
variant_t vResult;
vResult = m_plDomDocument->load(bstrFileName);
if(( (bool)vResult ) == TRUE)//success!
{
m_pDocRoot = m_plDomDocument->documentElement;
DisplayChildren(TVI_ROOT, m_pDocRoot);
if(0 == m_TreeCtrl.GetCount())
{
m_TreeCtrl.InsertItem("Empty document");
}
}
else
{
m_TreeCtrl.InsertItem("Document FAILED to load!");
}
}
}
void CAaaaDlg::DisplayChildren(HTREEITEM hParent, MSXML::IXMLDOMNodePtr pParent)
{
//Display the current node's name
HTREEITEM hItem = DisplayChild(hParent, pParent);
//Simple for loop to get all children
for(MSXML::IXMLDOMNodePtr pChild = pParent->firstChild;
NULL != pChild; pChild = pChild->nextSibling)
{
//For each child, call this function so that you get
//its children as well.
hItem = DisplayChild(hItem, pChild);
DisplayChildren(hItem, pChild);
}
}
HTREEITEM CAaaaDlg::DisplayChild(HTREEITEM hParent, MSXML::IXMLDOMNodePtr pChild)
{
//Add the element's node name to the tree view
//and return the hItem.
CString strElement( (LPCTSTR)pChild->nodeName);
return m_TreeCtrl.InsertItem(strElement, hParent);
}
Top
5 楼__A__(無羈の心)回复于 2004-09-05 05:49:21 得分 10
XML文档对象模型(DOM)是一种功能强大、健壮的程序化接口,
使用该接口不仅能够通过程序上载和分析XML文件或文档,而
且还可以用来遍历XML数据....
可以找相关的书查一下:)Top
6 楼__A__(無羈の心)回复于 2004-09-05 05:53:28 得分 10
上面的例程就是一个遍历XML数据,并在CTreeCtrl树视图
控件中分层展开的例子..Top
7 楼arvid_gs(west)回复于 2004-09-06 19:15:42 得分 10
XML文档对象模型(DOM)Top
8 楼nineclock(闭关中。。。)回复于 2004-09-06 19:52:50 得分 0
如果是为上手快,从网上下几个好用的类,操作很方便,我手头,要的话给我发短信Top
9 楼Oversense(步步文)回复于 2004-09-07 13:19:46 得分 0
tinyxml_2_3_2.tar.gzTop
10 楼tabby(-_-b .. 内存泄漏)回复于 2004-09-08 18:56:19 得分 0
实例代码:
link 里面添加:msxml2.lib
#include "msxml2.h"
try
{
HRESULT hr;
IXMLDOMDocument* pXMLDoc;
IXMLDOMNode* pXDN;
//COM的初始化
hr=CoInitialize(NULL);
//得到关于IXMLDOMDocument接口的指针pXMLDOC
hr=CoCreateInstance(CLSID_DOMDocument,NULL,CLSCTX_INPROC_SERVER,
IID_IXMLDOMDocument,(void**) &pXMLDoc);
//将XML字符串转换成UNICODE,然后加载
VARIANT_BOOL bSuccess = false;
pXMLDoc->loadXML(L"<?xml version=\"1.0\" encoding=\"GB2312\"?><root><file><time>2003-10-13</time><content>内容</content><title>标题</title></file></root>",&bSuccess);
//得到已加载的XML字符串,并显示
LPWCH tempxml;
//因为此处是输出参数[out][retval],所以不用new一段空间
pXMLDoc->get_xml(&tempxml);
MessageBoxW(NULL,tempxml,L"XML正文",MB_OK);
//取到<time>,<title>以及<content>节点,并显示结点内容
pXMLDoc->selectSingleNode(L"//time",(IXMLDOMNode **)&pXDN);
pXDN->get_text(&tempxml);
MessageBoxW(NULL,tempxml,L"time值",MB_OK);
pXMLDoc->selectSingleNode(L"//title",(IXMLDOMNode **)&pXDN);
pXDN->get_text(&tempxml);
MessageBoxW(NULL,tempxml,L"title值",MB_OK);
pXMLDoc->selectSingleNode(L"//content",(IXMLDOMNode **)&pXDN);
pXDN->get_text(&tempxml);
MessageBoxW(NULL,tempxml,L"content值",MB_OK);
//释放分配的资源
CoUninitialize();
}
catch(...)
{
AfxMessageBox("错误!");
}Top
11 楼snaill(com.chinaos.snaill)回复于 2004-09-09 10:10:28 得分 0
msxml的接口很简单,特别是dom,不过你要了解一点com的调用方法Top
12 楼zhujianping_es(DavidRipple)回复于 2004-09-09 11:05:11 得分 0
I Use tinyXMLTop
13 楼yanz03(一)回复于 2004-09-13 09:42:42 得分 0
楼主,您好!我看你的帖子中有这样一句话“收到JAVA程序发过来的一串XML”我现在已经能解析xml文件,但是不知道怎样用java程序发过来这样的一串xml,急用,盼回,等待中......Top
14 楼shuiguan(随便走走)回复于 2004-09-17 11:44:57 得分 0
学习Top
15 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2004-09-17 16:18:29 得分 0
太多XML开发包都支持window.和vc没关系Top




