新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 关于 XML 的一般性技术讨论,提供 XML入门资料 和 XML教程
    [返回] 计算机科学论坛XML.ORG.CN讨论区 - XML技术『 XML基础 』 → 用VC操作XML例子(网上例子改写)(还有一些不明白,大家来讨论讨论) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 5729 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 用VC操作XML例子(网上例子改写)(还有一些不明白,大家来讨论讨论) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     huzy204 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:61
      门派:XML.ORG.CN
      注册:2006/7/25

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给huzy204发送一个短消息 把huzy204加入好友 查看huzy204的个人资料 搜索huzy204在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看huzy204的博客楼主
    发贴心情 用VC操作XML例子(网上例子改写)(还有一些不明白,大家来讨论讨论)

    [color=#FF6600]//首先是创建XML的函数

    #import "msxml4.dll" //引入类型库(这个别忘了)
    void CXmltestDlg::OnCreate()
    {
     MSXML2::IXMLDOMDocumentPtr pDoc;
     MSXML2::IXMLDOMElementPtr  xmlRoot;

     //创建DOMDocument对象
     HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
     if(!SUCCEEDED(hr))
     {                
      MessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!");
      return;
     }

     //根节点的名称为china
     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->Puttext("WuHan");//节点值
     childNode->setAttribute("population","8,000,000");//属性名,属性值
     childNode->setAttribute("area","10000");
     xmlRoot->appendChild(childNode);


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

     pDoc->raw_createElement((_bstr_t)(char*)"City", &childNode);
     childNode->Puttext("ChengDu");
     childNode->setAttribute("population","13,000,000");
     childNode->setAttribute("area","15000");
     xmlRoot->appendChild(childNode);

     //保存到文件
     //如果不存在就建立,存在就覆盖
     pDoc->save("d:\\he.xml");  
    }

    //以下是得到XML的结点名称和属性(我搜索到的网上的例子只能得到第一个结点,改写的如下)
    void CXmltestDlg::OnGet()
    {
     //创建DOMDocument对象
     MSXML2::IXMLDOMDocumentPtr pDoc;
     HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
     if(!SUCCEEDED(hr))
     {                
      MessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!");
      return;
     }

     //加载文件
     pDoc->load("d://he.xml");
     
     CString str1;
     MSXML2::IXMLDOMElementPtr  childNode ;
    // MSXML2::IXMLDOMNodePtr node;
    // node = (MSXML2::IXMLDOMNodePtr)(pDoc->GetparentNode());
     MSXML2::IXMLDOMNamedNodeMapPtr pAttrs = NULL;
     MSXML2::IXMLDOMNodePtr pAttrItem;
     
     long nCount ;
     for (int j = 0 ;j < 3;j++)
     {
      str1.Format("//City[%d]",j);
      //在树中查找名为City的节点,"//"表示在任意一层查找
      childNode = (MSXML2::IXMLDOMElementPtr)(pDoc->selectSingleNode((_bstr_t)str1));

      //得到节点类型
      MSXML2::DOMNodeType nodeType;
      childNode->get_nodeType(&nodeType);

      //节点名称
      BSTR var;
      CString name;
      childNode->get_nodeName(&var);
      name = (char*)(_bstr_t)var;

      //节点值
      VARIANT varVal;
      childNode->get_nodeTypedValue(&varVal);
      CString strValue = (char*)(_bstr_t)varVal;

      //节点属性,放在链表中
      childNode->get_attributes(&pAttrs);
      pAttrs->get_length(&nCount);
      for(int i = 0 ; i < nCount ; i++)
      {                 
         pAttrs->get_item(i,&pAttrItem);
         //我们可以通过函数get_nodeName,get_nodeTypedValue得到属性名和属性值
         //也可以直接得到
         CString strAttrName   = (char*)(_bstr_t)pAttrItem->nodeName;
         CString strAttrValue  = (char*)(_bstr_t)pAttrItem->nodeTypedValue;
       CString temp;
         temp.Format("%s\t%s\t%s",strValue,strAttrName,strAttrValue);
       AfxMessageBox(temp);
      }
     }
    }

    我还想了解的问题:
    1.有没有函数直接得到下一个node值
    2.有没有函数能够返回所有结点的数目
    3.有没有简便的函数能够简单实现对XML的追加的读写
    问了很多人,也查了一些资料,都没有找到很好的答案,希望在这里大家多给点意见。


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/25 16:40:00
     
     huzy204 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:61
      门派:XML.ORG.CN
      注册:2006/7/25

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给huzy204发送一个短消息 把huzy204加入好友 查看huzy204的个人资料 搜索huzy204在『 XML基础 』的所有贴子 引用回复这个贴子 回复这个贴子 查看huzy204的博客2
    发贴心情 
    希望大家都来看看~
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/25 16:42:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XML基础 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/12/21 17:16:49

    本主题贴数2,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    2,656.250ms