|
|
|
hi all,
i have a problem is tht how can i load XML file in MFC VC++.
and how to read XML file.
becoz my Project using DOC/View Architecure for my project.
and another prob is that after reading the XML file.then some of information from XML must be print or show in child window.
plese guys i'm trying to solve this prob from last two or three days but not successed.help me.
it would be heaven to me if somebody could provide me exact code.
byeeeeee
Aavesh
|
|
|
|
|
Use MSXML
For more information just check out the following link.
I hope this help you
http://www.codeproject.com/soap/ce_xml.asp
Vision is Always important and so is your ATTITUDE.
Wishes.
Anshuman Dandekar
|
|
|
|
|
hi
thanx for ur reply.....
but i'm not getting that how can i integrate the code with my Application.
as i tried to search from google.it says that we can use LoadXML function to load the XML file.
when i treid it on vs.Net 2005 C++.i found a error "there is no system.xml namespace".
what should i do?
please help me......
byeee
Aavesh
|
|
|
|
|
Have you installed SOAP SDK
Vision is Always important and so is your ATTITUDE.
Wishes.
Anshuman Dandekar
|
|
|
|
|
|
// Use following method for opening the file
// pass filename as parameter
bool CMyClass::OpenXMLFile(const CComBSTR& bstrFileName)
{
VARIANT_BOOL bFlag;
_variant_t varFilePath;
CoInitialize(NULL);
if (m_pIDomDoc != NULL) //Declare it as member of ur class IXMLDOMDocument* m_pIDomDoc;
{
m_pIDomDoc = NULL;
}
if (m_pIDomDoc==NULL)
{
HRESULT hr = CoCreateInstance(CLSID_DOMDocument , NULL, CLSCTX_INPROC_SERVER , IID_IXMLDOMDocument ,
reinterpret_cast < void **> (&m_pIDomDoc));
if (SUCCEEDED(hr) && m_pIDomDoc!= NULL)
{
OLECHAR *oleFilePath = new OLECHAR[wcslen(bstrFileName) + 1];
wcscpy(oleFilePath, bstrFileName);
varFilePath = oleFilePath;
hr = m_pIDomDoc->load(varFilePath, &bFlag); //load the file in xmlDoc
if (SUCCEEDED(hr))
{
return true;
}
varFilePath.Clear();
delete []oleFilePath;
}
}
return false;
}
// call following method to read the elements of xml file
bool CMyClass::GetElement(const CComBSTR& bstrProperty, CComBSTR& bstrValue)
{
IXMLDOMElement *pIElement = NULL;
IXMLDOMNodeList *pINodeList = NULL;
IXMLDOMNodeList *pIChildNodeList = NULL;
IXMLDOMNode *pINode = NULL;
IXMLDOMNode *pIChildNode = NULL;
HRESULT hr;
CComBSTR bstrNodeName = NULL;
CComBSTR bstrNodeValue = NULL;
_variant_t varValue;
USES_CONVERSION;
hr = m_pIDomDoc->get_documentElement(&pIElement);
if (SUCCEEDED(hr) && pIElement!= NULL)
{
hr = pIElement->get_childNodes(&pINodeList);//get child nodes of document obj elem
if (SUCCEEDED(hr) && pINodeList!= NULL)
{
do {
pINodeList->nextNode(&pINode);//get next node in child node list
if (SUCCEEDED(hr) && pINode!= NULL)
{
hr = pINode->get_nodeName(&bstrNodeName);
if ((wcsicmp(bstrNodeName, bstrProperty)== 0))
{
hr = pINode->get_text(&bstrNodeValue);//get value of the property
bstrValue = bstrNodeValue;
if (bstrNodeName!= NULL)
::SysFreeString(bstrNodeName);
if (bstrNodeValue!= NULL)
::SysFreeString(bstrNodeValue);
pINode->Release();
pINodeList->Release();
pIElement->Release();
return true;
}
if (bstrNodeName!= NULL)
::SysFreeString(bstrNodeName);
pINode->Release();
}
}while(pINode!= NULL);
pINodeList->Release();
}
pIElement->Release();
}
return false;
}
call above method as
GetElement(_T("MyElement"), bstrValue);
USES_CONVERSION;
CString str = W2A(strValue);
store strvalue into the DS.
Please tell me if it helped you.
|
|
|
|
|
hi thanx for ur code
i tried openXML function in m project but its giving following:
1..\MainFrm.cpp(163) : error C2146: syntax error : missing ';' before identifier 'varFilePath'
2..\MainFrm.cpp(163) : error C2065: 'varFilePath' : undeclared identifier
3..\MainFrm.cpp(166) : error C2065: 'm_pIDomDoc' : undeclared identifier
4..\MainFrm.cpp(182) : error C2227: left of '->load' must point to class/struct/union/generic type type is ''unknown-type''
5..\MainFrm.cpp(187) : error C2228: left of '.Clear' must have class/struct/union type is ''unknown-type''
please give me suggestion that how can i rectify these errors
thanx
Aavesh
|
|
|
|
|
write following statement at the begining of ur code
#import "msxml.dll"
this should work otherwise
try including the header file for _variant_t class too.
i.e. comutil.h
|
|
|
|
|
hi
after including "msxml.dll" its giving me following error:
c:\program files\microsoft visual studio 8\vc\include\comdefsp.h(1041) : error C2872: 'IServiceProvider' : ambiguous symbol
could be 'c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(100) : IServiceProvider'
or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider'
c:\program files\microsoft visual studio 8\vc\include\comdefsp.h(1041) : error C2872: 'IServiceProvider' : ambiguous symbol
could be 'c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(100) : IServiceProvider'
or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider'
how to remove these errors
Aavesh
|
|
|
|
|
don't u hv msdn installed
y don't u try to search there
how abt. msxml3.dll
& it will be gr8 if u post ur code snippet
just don't shoot in the air.
|
|
|
|
|
i'm sending u my MainFrm.cpp file code & try to rel abt msxml3.dll from msdn:-
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "BigBossApp.h"
#include "comutil.h"
#include "MainFrm.h"
#import "msxml.dll"
//#include "LoadXML.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(ID_SIP, OnSip)
ON_COMMAND(ID_LOADXML_LOADXMLFILE, OnLoadxmlLoadxmlfile)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
//Add Dialog Bar
//if( !m_wndToolbox.Create(this,IDD_TOOLBOX,CBRS_LEFT | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY,IDD_TOOLBOX) )
if ( ! m_wndToolbox.Create(this, IDD_TOOLBOX, CBRS_BOTTOM , IDD_TOOLBOX))
{
TRACE0(_T("Failed to create the toolbox\n"));
return -1;
}
m_wndToolbox.SetWindowText("This is docking dialog bar");
m_wndToolbox.EnableDocking(CBRS_ALIGN_BOTTOM);
DockControlBar(&m_wndToolbox);
// Install the tab view here
VERIFY(m_MDIClient.SubclassMDIClient(this, &m_wndViewManager));
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CMDIFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CMDIFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CMDIFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// Without this, the window manager menu commands will be disabled,
// this is because without routing the command to the window manager,
// MFC thinks there is no handler for it.
if (m_MDIClient.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
return TRUE;
return CMDIFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
void CMainFrame::OnClose()
{
// TODO: Add your message handler code here and/or call default
m_MDIClient.SaveMainFrameState();
CMDIFrameWnd::OnClose();
}
//For Active window Caption
void CMainFrame::OnSip()
{
// TODO: Add your command handler code here
ShellExecute(this->m_hWnd,"open","sipXezPhone.exe","","",SW_SHOW );
}
void CMainFrame::OnLoadxmlLoadxmlfile()
{
// TODO: Add your command handler code here
OpenXMLFile("books.xml");
}
bool CMainFrame::OpenXMLFile(const CComBSTR& bstrFileName)
{
IXMLDOMDocument* m_pIDomDoc;
VARIANT_BOOL bFlag;
_variant_t varFilePath;
CoInitialize(NULL);
if (m_pIDomDoc != NULL) //Declare it as member of ur class IXMLDOMDocument* m_pIDomDoc;
{
m_pIDomDoc = NULL;
}
if (m_pIDomDoc==NULL)
{
HRESULT hr = CoCreateInstance(CLSID_DOMDocument , NULL, CLSCTX_INPROC_SERVER , IID_IXMLDOMDocument ,
reinterpret_cast < void **> (&m_pIDomDoc));
if (SUCCEEDED(hr) && m_pIDomDoc!= NULL)
{
OLECHAR *oleFilePath = new OLECHAR[wcslen(bstrFileName) + 1];
wcscpy(oleFilePath, bstrFileName);
varFilePath = oleFilePath;
hr = m_pIDomDoc->load(varFilePath, &bFlag); //load the file in xmlDoc
if (SUCCEEDED(hr))
{
return true;
}
varFilePath.Clear();
delete []oleFilePath;
}
}
return false;
}
/*int CMainFrame::_tmain(void)
{
XmlDocument xmlDoc = new XmlDocument();
try
{
xmlDoc.Load("books.xml");
CWnd::MessageBoxA("Document loaded ok." );
}
catch (Exception *e)
{
CWnd::MessageBoxA("load problem");
}
return 0;
}*/
/*void CMainFrame::Main()
{
DataSetMapXMLDataSample* myDataSetMapXMLDataSample = new DataSetMapXMLDataSample();
myDataSetMapXMLDataSample->Run(document);
}
void CMainFrame::Run(String* args)
{
try
{
Console::WriteLine(S"Creating an XmlDataDocument ...");
XmlDataDocument* datadoc = new XmlDataDocument();
// Infer the DataSet schema from the XML data and load the XML Data
datadoc->DataSet->ReadXml(new StreamReader(args), XmlReadMode::InferSchema);
DisplayTables(datadoc->DataSet);
}
catch (Exception* e)
{
Console::WriteLine (S"Exception: {0}", e->ToString());
}
}
void CMainFrame::DisplayTables(DataSet* dataset)
{
// Navigate Dataset
Console::WriteLine(S"\r\nContent of Tables ...");
DataTable* table;
DataColumn* column;
DataRow* row;
for(int i = 0; i < dataset->Tables->Count; i++)
{
table = dataset->Tables->Item[i];
Console::WriteLine(S"TableName = {0}" ,table->TableName);
Console::WriteLine (S"---------");
Console::WriteLine(S"Columns ...");
for(int j = 0; j <table->Columns->Count; j++)
{
column = table->Columns->Item[j];
Console::Write(S"{0,-22}",column->ColumnName);
}
Console::WriteLine(S"\r\nNumber of rows = {0}", __box(table->Rows->Count));
Console::WriteLine(S"Rows ...");
for(j = 0; j < table->Rows->Count; j++)
{
DataRow* row;
row = table->Rows->Item[j];
for(int k = 0;k < table->Columns->Count; k++)
{
Object* value = row->Item[k];
Console::Write(S"{0,-22}",value->ToString());
}
Console::WriteLine();
}
Console::WriteLine();
}
}*/
now tell me where i m wrong
Aavesh
|
|
|
|
|
//OpenXMLFile("books.xml");
OpenXMLFile("c:\\books.xml");
//IXMLDOMDocument* m_pIDomDoc
I asked u to make it member of ur class
declare it in MainFrm.h
u r so stupid U were suppose to post only related code
|
|
|
|
|
i post u all the code just for ur convienece..whatever???
i did all the thing as u said..but still its giving following error:
c:\program files\microsoft visual studio 8\vc\include\comdefsp.h(1041) : error C2872: 'IServiceProvider' : ambiguous symbol
could be 'c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(100) : IServiceProvider'
or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider'
c:\program files\microsoft visual studio 8\vc\include\comdefsp.h(1041) : error C2872: 'IServiceProvider' : ambiguous symbol
could be 'c:\program files\microsoft visual studio 8\vc\platformsdk\include\servprov.h(100) : IServiceProvider'
or 'c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : System::IServiceProvider'
now we i will see how this wise man is able to help a stupid man.
byeee
Aavesh
|
|
|
|
|
Sorry if u felt for what I said
I just wanted to tell u that never ever post ur project code (change name of classes & DS) and post only related code.
Ok coming back to the point..
actually two weeks before i was facing the same problem
i wanted to read a xml file
& I did whatever I told u before but,
i don't know what u hv done so far & Y from the hell the problem is coming to u .
by the way I did all these things on VS2005
one more thing i would like to mention that
import the dll where u are declaring
IXMLDOMDocument* m_pIDomDoc
I mean in main frame
MainFrm.h
#pragma once
#import "msxml.dll"
class YourClass
{
public:
IXMLDOMDocument* m_pIDomDoc;
}
try this.
|
|
|
|
|
hi
when i read ur previous to previous message then my first thought was that u r little arogant but ur previous message clear my doubt that u r not only a very helpful but also a very nice human bieng.
u know now its working nice no error.
just becoz of u thank u whatever ur name(thatsme_cool).
but its not the end i have to go very far i hope u will continue to travel with me.
bye
have a ball
Aavesh
|
|
|
|
|
Hi!
Do somebody know, how to create an dynamical array?
I tried to do something like that:
int count = 0;
while (s == newName) {
int i = atoi(s);
count ++;
int arr[count];
cin >> arr[i];
}
As long, as it founds some elements in a list, it should size the length of the array and fill it.
Thanks
-- modified at 2:41 Saturday 1st April, 2006
|
|
|
|
|
Replace these lines:
int arr[count];<br />
cin >> arr[i];
With this:
int* pArray = new int[count];<br />
cin >> pArray[i]
Then after you are done using the array:
delete [] pArray;
John
-- modified at 3:01 Saturday 1st April, 2006
|
|
|
|
|
First include this:
#include <vector>
Now we'll make a typedef for a vector (essentially dynamic array) of int s.
typedef std::vector<int> IntArray;
Now he's your code rewritten to use the vector:
int count = 0;
IntArray arr;
while (s == newName)
{
int i = atoi(s);
coun++;
int num;
cin >> num;
arr.push_back(num);
}
This code look like it would get in an infinite loop to me - But that's another story.
Steve
|
|
|
|
|
Hello !
I tried the following in CTreeCtrl to force label edit to end when we press VK_RETURN :
GetEditControl()->ShowWindow(SW_HIDE);
but I got AssertValid failed. Is there a nother way to do so?
Thanks.
Sovann
|
|
|
|
|
hi all..
well strange ques.
now i have a certain software and it works so fine ,but i need to add some option to a certain dialog in it !!! :-Dofcourse i don't have its src !!
any tips ??
|
|
|
|
|
No source hey. It depends on the nature of the change; If it's just a cosmetic change you can edit the dialog resource using Visual Studio. To do this you go to "File->Open", select the exe and select the open type as "Resources", from memory. It you want to add functionality you will need to alter the program or use some kind of hooking like which is possible by using the SetWindowsHookEx API - This is not for the faint hearted however.
Steve
|
|
|
|
|
this program downloading some files from the internet , what i want is to rename such files in a certain rules before it begin to download it
|
|
|
|
|
if u want to modify a program to yours in this way, u will not be successful because:
good software products alway have many secrets to protect themself, or dialog (such as About)/text-image on About are dynamically generated from code - not in resource.
A special image tool for Windows C++ programmers, don't miss it!
The world unique Software Label Maker is waiting for you and me ...
A nice hyper tool for optimizing your Microsoft html-help contents.
|
|
|
|