导航:首页 > 创造发明 > mfc创造xml文件

mfc创造xml文件

发布时间:2021-12-21 04:31:34

A. MFC怎么读取XML文件

void CXXXDlg::ReadXml(CString strXmlPath)
{
MSXML2::IXMLDOMDocumentPtr pDoc;
::CoInitialize(NULL);
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));

if (!SUCCEEDED(hr))
{
MessageBox(_T("创建DOMDocument对象失败。 请检查运行环境"), _T("错误"), MB_ICONERROR);
return;
} // 读取xml
pDoc->put_async(VARIANT_FALSE);
VARIANT_BOOL bhr = pDoc->load((_variant_t)strXmlPath); if (bhr != VARIANT_TRUE) {
MessageBox(_T("无法正确读取xml文件"), _T("错误"), MB_ICONERROR); return;
}
// 根节点取得
MSXML2::IXMLDOMElementPtr root = pDoc->documentElement; // 取得根节点的名字
_variant_t strRootName = root->nodeName;
_bstr_t wstrRootName(strRootName.bstrVal);
MSXML2::IXMLDOMNodeListPtr nodeList = root->GetchildNodes();//cases
// 解析cases的子节点
ReadCases(nodeList);
}
void CXXXDlg::ReadCases(MSXML2::IXMLDOMNodeListPtr nodeList)
{ int ilength = nodeList->Getlength(); for (int nodeCount = 0; nodeCount < ilength; nodeCount++) {
MSXML2::IXMLDOMNodePtr nodePtr = nodeList->nextNode();
_variant_t strNodeName = nodePtr->GetnodeName();
_variant_t strNodeValue = nodePtr->GetnodeValue();
// 读取case节点下的子节点
ReadCase(nodePtr->GetchildNodes());
}
}void CXXXDlg::ReadCase(MSXML2::IXMLDOMNodeListPtr nodeList)
{
CString strLogInfo;
strLogInfo.Empty();
CString strNo; // case编号
CString strSrcFile; // 源文件
CString strDestFile; // 目标文件
for (int nodeCount = 0; nodeCount < nodeList->Getlength(); nodeCount++)
{
MSXML2::IXMLDOMNodePtr nodePtr = nodeList->nextNode();
_variant_t strCaseNodeName = nodePtr->GetnodeName();
_variant_t strCaseNodeValue = nodePtr->Gettext();
BSTR bStrTemp = strCaseNodeName.bstrVal;
CString strTemp = CString(bStrTemp);
SysFreeString(bStrTemp);
CString strNodeName = strTemp; // 节点的值,如何取得?
if (0 == strNodeName.CompareNoCase(_T("NO")))
{
strNo = (BSTR)strCaseNodeValue.pbstrVal;
// 取得的值可以打印出来 printf(strNo);
}
// 节点有属性值,该怎么处理?
else if (0 == strNodeName.CompareNoCase(_T("CopyFile")))
{
strSrcFile.Empty();
strDestFile.Empty(); // 取得节点的属性值
MSXML2::IXMLDOMNamedNodeMapPtr pDOMAttrList= nodePtr->Getattributes(); for (int j = 0; j < pDOMAttrList->Getlength(); j++)
{
MSXML2::IXMLDOMNodePtr pDOMAttr= pDOMAttrList->Getitem(j);
// 取得源文件路径
if (CompareNoCase((char*)pDOMAttr->GetnodeName(), _T("src")))
{
strSrcFile = pDOMAttr->GetnodeTypedValue(); // 取得目标文件路径
} else if (CompareNoCase((char*)pDOMAttr->GetnodeName(), _T("dest")))
{
strDestFile =pDOMAttr->GetnodeTypedValue();
}

printf("strSrcFile = %s ", strSrcFile);
printf("strDestFile = %s ", strDestFile );
} else if (0 == strNodeName.CompareNoCase(_T("DelFile")))
{
strDestFile.Empty();
strDestFile = CString((BSTR)strCaseNodeValue.pbstrVal);

printf("strDestFile = %s ", strDestFile );
}
}
}

为了能够让MFC认识MSXML2,我们需要引入相应的dll,代码如下;
#import "msxml4.dll"

B. 求MFC读写xml格式文件的完整工程(VC6.0 编程工具)

C. MFC中怎么打开一个XML文件并将内容写入编辑

炫彩界面库来解答,你可以用tinyxml等库来打开XML, 然后读取内容 写入编辑.

D. 如何用MFC实现读取和修改XML文件中的数据


MSXML2::IXMLDOMDocumentPtr pDoc;
MSXML2::IXMLDOMElementPtr xmlRoot;
HRESULT hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));

if (FAILED(hr))
{
AfxMessageBox("无法创建对象,是否安装了MS XML运行库");
return;
}

pDoc->raw_createElement((_bstr_t)(char*)"china",&xmlRoot);
pDoc->raw_appendChild(xmlRoot,NULL);

MSXML2::IXMLDOMElementPtr childNode;
pDoc->raw_createElement((_bstr_t)(char*)"City",&childNode);
childNode->put_text((_bstr_t)(char*)"WuHan");
childNode->setAttribute((_bstr_t)(char*)"population",CComVariant("8,000,000"));
childNode->setAttribute((_bstr_t)(char*)"area",CComVariant("10000"));
xmlRoot->appendChild(childNode);

pDoc->raw_createElement((_bstr_t)(char*)"City",&childNode);
childNode->put_text((_bstr_t)(char*)"ShangHai");
childNode->setAttribute((_bstr_t)(char*)"population",CComVariant("12,000,000"));
childNode->setAttribute((_bstr_t)(char*)"area",CComVariant("12000"));
xmlRoot->appendChild(childNode);

pDoc->save("e:\\he.xml");


MSXML2::IXMLDOMDocumentPtr pDoc;
HRESULT hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
if (FAILED(hr))
{
AfxMessageBox("无法创建对象,是否安装了MS XML运行库");
return;
}
pDoc->load("e:\\he.xml");
MSXML2::IXMLDOMElementPtr childNode;
childNode=(MSXML2::IXMLDOMElementPtr)(pDoc->selectSingleNode("//City"));
MSXML2::DOMNodeType nodeType;
childNode->get_nodeType(&nodeType);
BSTR var;
childNode->get_nodeName(&var);
CString name=(char*)(_bstr_t)var;
VARIANT varVal;
childNode->get_nodeTypedValue(&varVal);
CString strValue=(char*)(_bstr_t)varVal;

MSXML2::IXMLDOMNamedNodeMapPtr pAttrs=NULL;
MSXML2::IXMLDOMNodePtr pAttrItem;
childNode->get_attributes(&pAttrs);
long nCount;
pAttrs->get_length(&nCount);
for(int i=0;i<nCount;i++)
{
pAttrs->get_item(i,&pAttrItem);
CString strAttrName=(char*)(_bstr_t)pAttrItem->nodeName;
CString strAttrValue=(char*)(_bstr_t)pAttrItem->nodeTypedValue;
AfxMessageBox(strAttrName+strAttrValue);
}

把上面的代码放到两个按钮下就可以了

E. MFC操作XML文件

xml文件就是有固定的格式,有开头和结束标识,比如说
<user>dxbzidane</user>,中间是你的用户名,所以你要提取到这个用户名就需要先找到开始标识<user>,再找结束标识</user>。

F. mfc 新建xml

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:: 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>

// 读取XML
<?xml version="1.0" encoding="utf-8"?>
<Cases>
<case>
<No>001</No>
<CopyFile src="C:\test.txt" dest="D:\test.txt"></CopyFile>
</case>

<case>
<No>002</No>
<DelFile>C:\test.txt</DelFile>
</case>
</Cases>
我们用MFC来读取上述xml,代码如下:

void CTestToolsDlg::ReadXml(CString strXmlPath)
{
MSXML2::IXMLDOMDocumentPtr pDoc;
::CoInitialize(NULL);
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));

if (!SUCCEEDED(hr))
{
MessageBox(_T("创建DOMDocument对象失败。\n请检查运行环境"), _T("错误"), MB_ICONERROR);
return;
}
// 读取xml
pDoc->put_async(VARIANT_FALSE);
VARIANT_BOOL bhr = pDoc->load((_variant_t)strXmlPath);

if (bhr != VARIANT_TRUE) {
MessageBox(_T("无法正确读取xml文件"), _T("错误"), MB_ICONERROR);
return;
}

// 根节点取得
MSXML2::IXMLDOMElementPtr root = pDoc->documentElement;
// 取得根节点的名字
_variant_t strRootName = root->nodeName;
_bstr_t wstrRootName(strRootName.bstrVal);
MSXML2::IXMLDOMNodeListPtr nodeList = root->GetchildNodes();//cases

// 解析cases的子节点

ReadCases(nodeList);

}

void CTestToolsDlg::ReadCases(MSXML2::IXMLDOMNodeListPtr nodeList)
{
int ilength = nodeList->Getlength();
for (int nodeCount = 0; nodeCount < ilength; nodeCount++) {
MSXML2::IXMLDOMNodePtr nodePtr = nodeList->nextNode();
_variant_t strNodeName = nodePtr->GetnodeName();
_variant_t strNodeValue = nodePtr->GetnodeValue();

// 读取case节点下的子节点
ReadCase(nodePtr->GetchildNodes());
}
}

void CTestToolDlg::ReadCase(MSXML2::IXMLDOMNodeListPtr nodeList)
{
CString strLogInfo;
strLogInfo.Empty();
CString strNo; // case编号
CString strSrcFile; // 源文件
CString strDestFile; // 目标文件
for (int nodeCount = 0; nodeCount < nodeList->Getlength(); nodeCount++)
{
MSXML2::IXMLDOMNodePtr nodePtr = nodeList->nextNode();
_variant_t strCaseNodeName = nodePtr->GetnodeName();
_variant_t strCaseNodeValue = nodePtr->Gettext();
BSTR bStrTemp = strCaseNodeName.bstrVal;
CString strTemp = CString(bStrTemp);
SysFreeString(bStrTemp);
CString strNodeName = strTemp;
// 节点的值,如何取得?
if (0 == strNodeName.CompareNoCase(_T("NO")))
{
strNo = (BSTR)strCaseNodeValue.pbstrVal;

// 取得的值可以打印出来
printf(strNo);
}

// 节点有属性值,该怎么处理?
else if (0 == strNodeName.CompareNoCase(_T("CopyFile")))
{
strSrcFile.Empty();
strDestFile.Empty();
// 取得节点的属性值
MSXML2::IXMLDOMNamedNodeMapPtr pDOMAttrList= nodePtr->Getattributes();
for (int j = 0; j < pDOMAttrList->Getlength(); j++)
{
MSXML2::IXMLDOMNodePtr pDOMAttr= pDOMAttrList->Getitem(j);
// 取得源文件路径
if (CompareNoCase((char*)pDOMAttr->GetnodeName(), _T("src")))
{
strSrcFile = pDOMAttr->GetnodeTypedValue();
// 取得目标文件路径
} else if (CompareNoCase((char*)pDOMAttr->GetnodeName(), _T("dest")))
{
strDestFile =pDOMAttr->GetnodeTypedValue();
}

CopyFile(strSrcFile, strDestFile, FALSE);
}
else if (0 == strNodeName.CompareNoCase(_T("DelFile")))
{
strDestFile.Empty();
strDestFile = CString((BSTR)strCaseNodeValue.pbstrVal);

DeleteFile(strDestFile);
}
}
}
为了能够让MFC认识MSXML2,我们需要引入相应的dll,代码如下;
#import "msxml4.dll"

G. MFC下使用msxml.dll生成xml文件格式不对齐

对齐方式是段落内容在文档的左右边界之间的横向排列方式。Word共有5种对齐方式:左对齐、右对齐、居中对齐、两端对齐和分散对齐。

左对齐是将文字段落的左边边缘对齐;
两端对齐是将文字段落的左右两端的边缘都对齐;
两者异同:
这两种对齐方式的左边都是对齐的,而一般来说,如果段末最后一行字数太少,那么最后一行“两端对齐”的效果与“左对齐”的效果一样;又由于我们的阅读习惯基本上都是从左到右,且中文文章中的行尾相差不,不注意看不出其中差别,因此,人们就会觉得“左对齐”与“两端对齐”的效果一样。

其实呢,两者之间是有区别的,“两端对齐”的段落的右边也是对齐的,而“左对齐”的右边一般情况下不会对齐。做个试验:你在word中输入一段比较长的英文文字,分别使用两种不同的对齐方式,仔细观察,就会发现两者之间的差别了。

因为一般来说,我们有这样的书写规则:
大部分标点符号不能放在行首,比如句号“。”、问号“?”等;
一串字符(一个英文单词、一串数字)不能拆开或割断放在不同的两行;

于是,在这样的书写规则下,我们常常会遇到文章各行的文字(字符)数不相等的情况,这时采用“左对齐”的方式,就会出现每行行尾不整齐的情况,而采用“两端对齐”的方式,就会把超出的行压缩、减少的行拉伸,使整个段落各行右端也对齐(末行除外),这样的文章看上去就比较美观些。

在两端对齐方式中,由于通常每段最后一行都比其他行短,文本会显得没有两端对齐。要使具有两端对齐格式的段落中的最后一行也两端对齐,请将插入点置于最后一行末尾,然后按 Shift+Enter。请注意,如果对齐的行很短,会在单词间插入大段的空白,因而会使该行显得不美观。

H. mfc往xml文件中写进中文不乱码

这是因为字符集问题, 如果你保存的时候是unicode, 读取的时候就要使用unicode显示, ASCII就要使用ASCII显示.
我估计是因为2012默认环境是unicode的, 而你打开一个记事本, 输入文字, 默认保存为ASCII这样,编码不一样, 显示就是乱码了.GBK和UTF-8都是字符的集合;
GBK是UTF-8的子集,UTF-8还包含了很多很多GBK中没有的字符(各国家的语言字符等),所以写程序时尽量使用UTF-8格式。
你做的测试中为什么没有出现乱码, 这是因为GBK和UTF-8中都包含中文和英文字符(中文和英文字符是GBK和UTF-8两个集合的交集)。
有时要读取一些数据(比如文件流),这时要小心处理了,Windows的记事本就犯了个错误。给你举个例子步骤如下:
1、打开Windows自带的记事本,输入“联通”两个汉字(没有双引号);
2、保存。
3、再用记事本打开看看内容utf和gbk都可以表示中文啊,用记事本打开的时候,记事本会自动检查文件的编码,并用对应的编码显示,所以没乱码 但是如果一个utf8的文件,你强制要用gbk去显示,肯定乱
分页的话需要一个pagebean,在里面吧参数如每页显示数、第几页等传到这个bean里面再返回到页面,网上类似的参考程序也有,你自己看看吧,祝好! 如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

I. vc中用mfc如何操作xml文档

XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini。VC++里操作XML有两个库可以用:MSXML和XmlLite。MSXML又细分了两种接口:DOM和SAX2。XP没自带有XmlLite,只自带有2.x、3.x版的MSXML,不支持SAX2(需要MSXML 4.0以上),所以优先使用DOM。

DOM是以COM形式提供的,VC++里调用DOM可以分3种方法:

1、MFC里用CComPtr调用

2、SDK里直接调用DOM接口

3、SDK里用智能指针调用

这3种方法本质上是一样的,区别只不过在于需要编码的多少而已,用CComPtr可以极大的简化代码,下面是几个例子。

例子stocks.xml:

<?xml version="1.0" encoding="utf-8"?>

<root>

<node1>text1</node1>

<node2>

<childnode1 attrib1="value1" attrib2="value2"/>

<childnode2 attrib1="value1" attrib2="value2">childtext1</childnode2>

</node2>

</root>

这个例子应该包含了XML最常见的特征了吧?

MFC

MFC里可以直接使用DOM,不需要手动添加额外的头文件,只需要在CWinApp::InitInstance()里调用CoInitialize(NULL)初始化COM,在CWinApp::ExitInstance里调用CoUninitialize()释放COM就行了。

//读取XML

CComPtr<IXMLDOMDocument> spDoc; //DOM

spDoc.CoCreateInstance(CLSID_DOMDocument);

VARIANT_BOOL vb;

spDoc->load(CComVariant(OLESTR("stocks.xml")), &vb); //加载XML文件

CComPtr<IXMLDOMElement> spRootEle;

spDoc->get_documentElement(&spRootEle); //根节点

CComPtr<IXMLDOMNodeList> spNodeList;

spRootEle->get_childNodes(&spNodeList); //子节点列表

long nLen;

spNodeList->get_length(&nLen); //子节点数

for (long i = 0; i != nLen; ++i) //遍历子节点

{

CComPtr<IXMLDOMNode> spNode;

spNodeList->get_item(i, &spNode);

ProcessNode(spNode); //节点处理函数

}

//写入XML

CComPtr<IXMLDOMNode> spNode;

spRootEle->selectSingleNode(OLESTR("/root/node1"), &spNode);

spNode->put_text(OLESTR("newText")); //写入text

spRootEle->selectSingleNode(OLESTR("/root/node2/childnode1/@attrib1"), &spNode);

spNode->put_nodeValue(CComVariant(OLESTR("newValue"))); //写入value

CComPtr<IXMLDOMNode> spNewNode;

spDoc->createNode(CComVariant(NODE_ELEMENT), OLESTR("childnode3"), OLESTR(""), &spNewNode); //创建新节点

spRootEle->selectSingleNode(OLESTR("/root/node2"), &spNode);

spNode->appendChild(spNewNode, &spNewNode); //将新节点加为node2的子节点

spNewNode->put_text(OLESTR("childtext2")); //写入新节点text

CComQIPtr<IXMLDOMElement> spEle = spNewNode; //注意这里使用CComQIPtr

spEle->setAttribute(OLESTR("attrib1"), CComVariant(OLESTR("value1")));//给新节点添加属性

spDoc->save(CComVariant(OLESTR("stocks.xml")));

//节点处理函数

void ProcessNode(CComPtr<IXMLDOMNode>& spNode)

{

CComBSTR bsNodeName;

spNode->get_nodeName(&bsNodeName); //节点名

AfxMessageBox(COLE2CT(bsNodeName));

CComVariant varVal;

spNode->get_nodeValue(&varVal); //节点值

AfxMessageBox(COLE2CT(varVal.bstrVal));

DOMNodeType eNodeType;

spNode->get_nodeType(&eNodeType);

if (eNodeType == NODE_ELEMENT) //只有NODE_ELEMENT类型才能包含有属性和子节点

{

//递归遍历节点属性

CComPtr<IXMLDOMNamedNodeMap> spNameNodeMap;

spNode->get_attributes(&spNameNodeMap);

long nLength;

spNameNodeMap->get_length(&nLength);

for (long i = 0; i != nLength; ++i)

{

CComPtr<IXMLDOMNode> spNodeAttrib; //注意属性也是一个IXMLDOMNode

spNameNodeMap->get_item(i, &spNodeAttrib);

ProcessNode(spNodeAttrib);

}

//递归遍历子节点

CComPtr<IXMLDOMNodeList> spNodeList;

spNode->get_childNodes(&spNodeList);

spNodeList->get_length(&nLength);

for (long i = 0; i != nLength; ++i)

{

CComPtr<IXMLDOMNode> spChildNode;

spNodeList->get_item(i, &spChildNode);

ProcessNode(spChildNode);

}

}

}

对于<tag>text</tag>这样的节点,get_nodeValue会得到空,要得到"text"的话可以遍历子节点(只有一个子节点,它的nodeName为"#text",nodeType为NODE_TEXT,nodeValue就是"text");也可以用get_text直接得到"text",但是对于这样的节点<tag>text<childtag>childtext</childtag></tag>,get_text会同时得到"text"和"childtext",不过这样的节点应该是不允许的。

DOM里使用的字符串(BSTR)都是OLESTR类型,默认情况下OLESTR是Unicode字符,MFC里可以用COLE2CT把LPCOLESTR转换为LPCTSTR。

对于自己定义的XML,大多数时候不需要遍历,可以通过调用selectNodes、selectSingleNode指定XPath直接读取某个节点或属性:

CComPtr<IXMLDOMDocument> spDoc; //DOM

spDoc.CoCreateInstance(CLSID_DOMDocument);

VARIANT_BOOL vb;

spDoc->load(CComVariant(OLESTR("stocks.xml")), &vb); //加载XML文件

CComPtr<IXMLDOMElement> spRootEle;

spDoc->get_documentElement(&spRootEle); //根节点

CComPtr<IXMLDOMNodeList> spNodeList;

CComPtr<IXMLDOMNode> spNode;

spRootEle->selectNodes(OLESTR("/root/node2/*"), &spNodeList); //得到node2下的所有子节点

spRootEle->selectSingleNode(OLESTR("/root/node2/childnode1/@attrib1"), &spNode); //得到childnode1的attrib1属性

XPath的语法可以参考XML文档或MSDN。

SDK

SDK中也可以使用智能指针,和MFC没太大区别,同样很方便,直接给代码:

#include <iostream>

#include <tchar.h>

#import <msxml3.dll>

//节点处理函数

void ProcessNode(MSXML2::IXMLDOMNodePtr spNode)

{

std::cout << "nodeName: " << spNode->nodeName;

if (spNode->nodeType == NODE_ATTRIBUTE || spNode->nodeType == NODE_TEXT)

std::cout << "\tnodeValue: " << _bstr_t(spNode->nodeValue);

std::cout << std::endl;

if (spNode->nodeType == NODE_ELEMENT)

{

MSXML2::IXMLDOMNamedNodeMapPtr spNameNodeMap = spNode->attributes;

for (long i = 0; i != spNameNodeMap->length; ++i) //遍历节点属性

ProcessNode(spNameNodeMap->item);

MSXML2::IXMLDOMNodeListPtr spNodeList = spNode->childNodes;

for (long i = 0; i != spNodeList->length; ++i) //遍历子节点

ProcessNode(spNodeList->item);

}

}

int _tmain(int argc, _TCHAR* argv[])

{

CoInitialize(NULL);

//读取XML

MSXML2::IXMLDOMDocumentPtr spXMLDoc;

spXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));

spXMLDoc->load(L"stocks.xml");

MSXML2::IXMLDOMElementPtr spRoot = spXMLDoc->documentElement; //根节点

MSXML2::IXMLDOMNodeListPtr spNodeList = spRoot->childNodes;

for (long i = 0; i != spNodeList->length; ++i) //遍历子节点

ProcessNode(spNodeList->item);

//写入XML

spRoot->selectSingleNode(L"/root/node1")->text = L"newText";

spRoot->selectSingleNode(L"/root/node2/childnode1/@attrib1")->nodeValue = L"newValue";

MSXML2::IXMLDOMNodePtr spNewNode = spRoot->selectSingleNode(L"/root/node2")->appendChild(

spXMLDoc->createNode(_variant_t(NODE_ELEMENT), L"childnode3", L"")

); //给node2创建新子节点childnode3

spNewNode->text = L"childtext2";

MSXML2::IXMLDOMElementPtr spEle = spNewNode;

spEle->setAttribute(L"attrib1", _variant_t(L"value1")); //添加新属性

spXMLDoc->save(_variant_t(L"stocks.xml"));

spNewNode.Release();

spEle.Release();

spNodeList.Release();

spRoot.Release();

spXMLDoc.Release();

CoUninitialize();

system("pause");

return 0;

}

J. 急!!我用mfc写的ActiveX程序生成一个xml文件,怎样才能把这个xml文件发送到jsp网页呢

用服务器发

阅读全文

与mfc创造xml文件相关的资料

热点内容
申请商标到哪个部门 浏览:762
购买无形资产的相关税费可以抵扣吗 浏览:982
商标注册被骗怎么办 浏览:160
朗太书体版权 浏览:268
大学无形资产管理制度 浏览:680
马鞍山向山镇党委书记 浏览:934
服务创造价值疏风 浏览:788
工商登记代名协议 浏览:866
2015年基本公共卫生服务项目试卷 浏览:985
创造营陈卓璇 浏览:905
安徽职称计算机证书查询 浏览:680
卫生院公共卫生服务会议记录 浏览:104
泉州文博知识产权 浏览:348
公共卫生服务培训会议小结 浏览:159
马鞍山揽山别院价格 浏览:56
施工索赔有效期 浏览:153
矛盾纠纷交办单 浏览:447
2010年公需课知识产权法基础与实务答案 浏览:391
侵权责任法第5556条 浏览:369
创造者对吉阿赫利直播 浏览:786