利用MSXML解析XML文本
http://tech.ddvip.com 2007年10月25日 社区交流
内容摘要:XML允许大量HTML样式的形式自由的开发,但是它对规则的要求更加严格。XML主要有三个要素:DTD(Document Type Declaration——文档类型声明)或XML Schema(XML大纲)、XSL(eXtensible Stylesheet Language——可扩展样式语言)和XLink(eXtensible Link Language——可扩展链接语言)。
BOOL DOMDocSaveLocation()
{
BOOL bResult = FALSE;
IXMLDOMDocument *pIXMLDOMDocument = NULL;
HRESULT hr;
try
{
_variant_t varString = _T("D:sample.xml");
// 这里需要创建一个DOMDocument对象和装载XML文档,代码省略.
hr = pIXMLDOMDocument->save(varString); //保存文档到D:sample.xml中去。
if(SUCCEEDED(hr))
bResult = TRUE;
}
catch(...)
{
DisplayErrorToUser();
// 这里需要释放对IXMLDOMDocument接口的引用,代码省略。
}
return bResult;
}
例子2
IXMLDOMDocument *pIXMLDOMDocument = NULL;
wstring strFindText (_T("author"));
IXMLDOMNodeList *pIDOMNodeList = NULL;
IXMLDOMNode *pIDOMNode = NULL;
long value;
BSTR bstrItemText;
HRESULT hr;
try
{
// 创建一个DOMDocument文档对象,并装载具体文档,相关代码省略。
//下面的代码用来得到一个和标签名称author相关的所有的节点集合
hr = pIXMLDOMDocument->getElementsByTagName(
(TCHAR*)strFindText.data(), &pIDOMNodeList);
SUCCEEDED(hr) ? 0 : throw hr;
//是否正确的得到了指向IDOMNodeList的指针。
hr = pIDOMNodeList->get_length(&value); //得到所包含的NODE节点的个数
if(SUCCEEDED(hr))
{
pIDOMNodeList->reset();
for(int ii = 0; ii < value; ii++)
{
//得到具体的一个NODE节点
pIDOMNodeList->get_item(ii, &pIDOMNode);
if(pIDOMNode )
{
pIDOMNode->get_text(&bstrItemText); //得到该节点相关的文本信息
::MessageBox(NULL, bstrItemText,strFindText.data(), MB_OK);
pIDOMNode->Release();
pIDOMNode = NULL;
}
}
}
pIDOMNodeList->Release();
pIDOMNodeList = NULL;
}
catch(...)
{
if(pIDOMNodeList)
pIDOMNodeList->Release();
if(pIDOMNode)
pIDOMNode->Release();
DisplayErrorToUser();
}
来源:软件世界 作者:胡朝晖 责编:豆豆技术应用