我想用XML类型的文件记录一些点并和数据库里面的字段对应起来。XML文件格式如下
<pic cx="200" cy="200">
<ID DeviceID="1000">
<point x="150" y="120"/>
</ID>
<ID DeviceID="1001">
<point x="50" y="30"/>
</ID>
<ID DeviceID="1002">
<point x="70" y="10"/>
</ID>
</pic>不想使用现成的类如mackup,tinyxml等,而直接使用MSXML对他们进行创建,插入,修改,删除,查询等操作,也就是把它当成一个数据库,该如何实现阿?我对VC下的MSXML操作不明白。看了网上很多例子和源码,讲解的都不是很全面。希望高人帮帮忙。
插入,修改,删除,查询操作只对下面这样的节点进行:
<ID DeviceID="1002">
<point x="70" y="10"/>
</ID>
例如文件已经建立我需要插入一条记录
<ID DeviceID="1003">
<point x="50" y="20"/>
</ID>
则变成
<pic cx="200" cy="200">
<ID DeviceID="1000">
<point x="150" y="120"/>
</ID>
<ID DeviceID="1001">
<point x="50" y="30"/>
</ID>
<ID DeviceID="1002">
<point x="70" y="10"/>
</ID>
<ID DeviceID="1003">
<point x="50" y="20"/>
</ID>
</pic>
希望各位大侠来点干的,别糊弄阿。
<pic cx="200" cy="200">
<ID DeviceID="1000">
<point x="150" y="120"/>
</ID>
<ID DeviceID="1001">
<point x="50" y="30"/>
</ID>
<ID DeviceID="1002">
<point x="70" y="10"/>
</ID>
</pic>不想使用现成的类如mackup,tinyxml等,而直接使用MSXML对他们进行创建,插入,修改,删除,查询等操作,也就是把它当成一个数据库,该如何实现阿?我对VC下的MSXML操作不明白。看了网上很多例子和源码,讲解的都不是很全面。希望高人帮帮忙。
插入,修改,删除,查询操作只对下面这样的节点进行:
<ID DeviceID="1002">
<point x="70" y="10"/>
</ID>
例如文件已经建立我需要插入一条记录
<ID DeviceID="1003">
<point x="50" y="20"/>
</ID>
则变成
<pic cx="200" cy="200">
<ID DeviceID="1000">
<point x="150" y="120"/>
</ID>
<ID DeviceID="1001">
<point x="50" y="30"/>
</ID>
<ID DeviceID="1002">
<point x="70" y="10"/>
</ID>
<ID DeviceID="1003">
<point x="50" y="20"/>
</ID>
</pic>
希望各位大侠来点干的,别糊弄阿。
解决方案 »
- 急 树控件拖动节点时只有图标没有后面的文字
- 用一个文本框实现类似ajax的自动检索的功能
- 有谁用过Excel读写控件?我不会用,也用不了,请大家帮忙
- 关于系统函数应用问题!!!
- 想做这样一个程序,请提示?
- 《深入浅出MFC》中Command Routing一节有些不懂的地方。正如P153页所说的,当CMyFrameWnd对象获得一个WM_COMMAND时,所引起的消息怎么会
- 那里能够下载Xtreme toolKit
- 对话框的edit控件刷新问题
- 我需要进行基于formview的sdi视切换,可是总是报错,不知道是怎么回事,谁能帮我看看,多谢!
- :如何动态得到(设置)DBGRID的某一位置的值(如第二行,第二列的值)?用哪个函数
- 可不可以把某个软件(比如电影播放软件)的声音输出给左声道,其它的给右声道?
- 有关数据库编译链接通过,运行发生错误的问题
http://www.vckbase.com/document/viewdoc/?id=696
通过DOM导航找到pic节点,获得IXMLDOMElement
IXMLDOMDocument::createNode 用来创建节点或者创建某个节点的属性
IXMLDOMElement::appendChild 用来把创建的节点附加到当前节点的子节点序列的末尾
主要就是参照SDK上的东东 调用不同的对象和函数
to jameshooo and kakashi0309 :你说的这些我都懂,可是具体如何操作阿?那东西找不到好的例子。
to ToperRay :帖子比较长,需要逐个验证。
另谁有比较完整的例子,网上自己也搜索过一堆,没有几个实用的。拿来别人的东西自己要先验证一下,才能形成自己的东西。
#define UNICODE#include <windows.h>
#include <windowsx.h>
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <urlmon.h>
#include <hlink.h>
#include <dispex.h>
#include "mshtml.h"
#include "msxml.h"#define ASSERT(x) if(!(x)) DebugBreak()
#define CHECK_ERROR(cond, err) if (!(cond)) {pszErr=(err); goto done;}
#define SAFERELEASE(p) if (p) {(p)->Release(); p = NULL;} else ;
int _cdecl main (int argc, char **argv)
{
PSTR pszErr = NULL;
IXMLDocument *pDoc = NULL;
IStream *pStm = NULL;
IPersistStreamInit *pPSI = NULL;
CHAR buf[MAX_PATH];
CHAR *pszURL; HRESULT hr; //
// Check usage.
//
if (argc != 2)
{
fprintf (stderr, "Usage: %s URL\n", argv[0]);
fprintf (stderr, "Eg %s c:\\nt\\private\\inet\\xml\\test\\channel.cdf\n", argv[0]);
fprintf (stderr, "or %s http://ohserv/users/julianj/msnbc.cdf\n", argv[0]);
exit (1);
} //
// HACK if passed in a file name; expand if it doesn't look like a URL.
//
if (CompareStringA(LOCALE_USER_DEFAULT, NORM_IGNORECASE, argv[1], 7, "http://", 7) == CSTR_EQUAL)
{
pszURL = argv[1];
}
else
{
pszURL = buf;
GetFullPathNameA(argv[1], MAX_PATH, pszURL, NULL);
} hr = CoInitialize(NULL);
ASSERT(SUCCEEDED(hr)); //
// Create an empty XML document.
//移植到vc6,下面这句就出错
hr = CoCreateInstance(CLSID_XMLDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IXMLDocument, (void**)&pDoc); CHECK_ERROR (pDoc, "CoCreateInstance Failed"); //
// Synchronously create a stream on a URL.
//
hr = URLOpenBlockingStreamA(0, pszURL, &pStm, 0,0);
CHECK_ERROR(SUCCEEDED(hr) && pStm, "Couldn't open stream on URL")
//
// Get the IPersistStreamInit interface to the XML doc.
//
hr = pDoc->QueryInterface(IID_IPersistStreamInit, (void **)&pPSI);
CHECK_ERROR(SUCCEEDED(hr), "QI for IPersistStreamInit failed"); //
// Init the XML doc from the stream.
//
hr = pPSI->Load(pStm);
//CHECK_ERROR(SUCCEEDED(hr), "Couldn't load XML doc from stream"); if(SUCCEEDED(hr))
{
printf("%s : XML File is well formed \r\n",argv[0]); }
else
{
// Print error information !
IXMLError *pXMLError = NULL ;
XML_ERROR xmle; hr = pPSI->QueryInterface(IID_IXMLError, (void **)&pXMLError);
CHECK_ERROR(SUCCEEDED(hr), "Couldn't get IXMLError"); ASSERT(pXMLError); hr = pXMLError->GetErrorInfo(&xmle);
SAFERELEASE(pXMLError);
CHECK_ERROR(SUCCEEDED(hr), "GetErrorInfo Failed"); printf("%s :", argv[0]);
wprintf(TEXT(" Error on line %d. Found %s while expecting %s\r\n"),
xmle._nLine,
xmle._pszFound,
xmle._pszExpected);
SysFreeString(xmle._pszFound);
SysFreeString(xmle._pszExpected);
SysFreeString(xmle._pchBuf);
}done: // Clean up.
//
// Release any used interfaces.
//
SAFERELEASE(pPSI);
SAFERELEASE(pStm);
SAFERELEASE(pDoc); if (pszErr)
fprintf (stderr, "%s, last error %d\n", pszErr, GetLastError());
return 0;
}
CLSCTX_INPROC_SERVER,
IID_IXMLDocument
都未定义。
算了,看来指望论坛能人提供个例子的想法是错误的。能人们都指望这些技术吃饭哪。
看书闭关中,我一定能做一个完成的例子出来。到时候再来结帖,并发布(虽然不是啥了不起的东西)。
为啥国外有codeguru,codeproject,sourceforge这类网站,而国内这类网站却收费?
我想这也是国内老是比人家落后的一个原因吧。
今天比较郁闷,心情不好,有些话说重了大家见谅阿。