導航:首頁 > 創造發明 > 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