利用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();
  }

来源:软件世界    作者:胡朝晖    责编:豆豆技术应用

正在加载评论...