**如题。**
代码
系统自带MSXML6.dll,在C盘system32下。先要导入文件,定义使用空间。
1 2
| #import <msxml6.dll> using namespace MSXML2;
|
为三个编辑框分别添加变量m_strId,m_strAuthor,m_strTitle。
主要代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| void CXMLDlg::OnBnClickedBtncreate() { UpdateData();
MSXML2::IXMLDOMDocumentPtr pDoc; MSXML2::IXMLDOMElementPtr xmlRoot;
HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument60));
xmlRoot = pDoc->createElement((_bstr_t)"Book");
xmlRoot->setAttribute("id", (_variant_t)m_strId); pDoc->appendChild(xmlRoot); MSXML2::IXMLDOMElementPtr pNode; pNode = pDoc->createElement((_bstr_t)"Author"); pNode->Puttext((_bstr_t)m_strAuthor); xmlRoot->appendChild(pNode);
pNode = pDoc->createElement("Title"); pNode->Puttext((_bstr_t)m_strTitle); xmlRoot->appendChild(pNode);
pDoc->save("text.xml"); }
void CXMLDlg::OnBnClickedBtnload() { MSXML2::IXMLDOMDocumentPtr pDoc; HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument60));
pDoc->load("text.xml");
MSXML2::IXMLDOMNodePtr pNode; pNode = pDoc->selectSingleNode("//Book"); MSXML2::DOMNodeType nodeType; pNode->get_nodeType(&nodeType); CString strName; strName = (char *)pNode->GetnodeName(); MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap = NULL; MSXML2::IXMLDOMNodePtr pAttrItem; _variant_t variantValue; pNode->get_attributes(&pAttrMap); long count; count = pAttrMap->get_length(&count); pAttrMap->get_item(0, &pAttrItem); pAttrItem->get_nodeTypedValue(&variantValue); m_strId = (char *)(_bstr_t)variantValue; UpdateData(FALSE); }
void CXMLDlg::OnBnClickedBtnclear() { m_temp = ""; SetDlgItemText(IDC_EDIT1, m_temp); SetDlgItemText(IDC_EDIT2, m_temp); SetDlgItemText(IDC_EDIT3, m_temp);
}
|
效果
生成的XML:
界面:
报错
之前也遇到过类似情况。
解决:
Unicode in the Windows API
Conventions for Function Prototypes
简单说来,是因为随着版本更替,老规则渐渐不使用,现在的字符多是Unicode字符集,为了各版本的兼容,最好的方法是使用TEXT宏。即将程序改为:
1 2 3 4 5 6 7 8 9
| if (!SUCCEEDED(hr))
{
MessageBox(_T("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"));
return;
}
|
即能编译通过。
这个DOMDocument40是什么?同样的程序,WIN7电脑就可以编译通过,WIN10就报错?要换成DOMDocument60才行。
答:MSXML SDK版本不同造成的差异。
参考
MFC中利用MSXML解析XML文档