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

    >> 本版讨论DOM, SAX, XPath等。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DOM/SAX/XPath 』 → 在VC中应用MSXML DOM 的一些基本实现方法 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 12761 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 在VC中应用MSXML DOM 的一些基本实现方法 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     jipeng_first 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:4
      积分:69
      门派:XML.ORG.CN
      注册:2005/9/13

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给jipeng_first发送一个短消息 把jipeng_first加入好友 查看jipeng_first的个人资料 搜索jipeng_first在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看jipeng_first的博客楼主
    发贴心情 在VC中应用MSXML DOM 的一些基本实现方法

    自己整理的一些东西,与大家分享。
    已知变量
    MSXML2::IXMLDOMDocument *pDoc;
    MSXML2::IXMLDOMNode *pChild, *pParent;
    MSXML2::IXMLDOMNode *pNod;
    MSXML2::IXMLDOMElement *pEle;


    初始化指针:
    MSXML2::IXMLDOMDocument *pDocument=NULL;
    MSXML2::IXMLDOMNodeList *pNodeList=NULL;
    MSXML2::IXMLDOMNamedNodeMap *pNodeMap=NULL;
    MSXML2::IXMLDOMNode *pNode=NULL
    MSXML2::IXMLDOMText *pText=NULL;
    MSXML2::IXMLDOMElement *pElement=NULL;
    MSXML2::IXMLDOMProcessingInstruction *pProcessingInstruction=NULL;
    MSXML2::IXMLDOMComment *pComment=NULL;

    MSXML2::IXMLDOMParseError *pObjError = NULL;

    已知数据:
    BSTR bstrText, bstrName;
    int  type;

    **)创建新文档
    // hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
    //  IID_IXMLDOMDocument,(void**)&m_pXMLDoc);
    HRESULT hr=CoCreateInstance(__uuidof(MSXML2::DOMDocument40),NULL,CLSCTX_INPROC_SERVER,
      __uuidof(MSXML2::IXMLDOMDocument),(void**)&m_pXMLDoc);
        hr = pDocument->put_async(VARIANT_FALSE); 
        hr = pDocument->put_validateOnParse(VARIANT_FALSE);
    hr = pDocument->put_resolveExternals(VARIANT_FALSE);


    a)添加子节点到父节点
    pParent->appendChild(pChild, &pNode)


    b)创建节点
    VARIANT vtype;
    vtype.vt = VT_I4;
    V_I4(&vtype) = (int)type;
    pDoc->createNode(vtype, bstrName, NULL, &pNode);

    c)创建元素节点
    pDoc->createElement(bstrName,pElement);
    (pElement)->put_text(bstrText);

    d)创建文本子节点,并添加到父节点中
    pDoc->createTextNode(bstrText,&pText);
    pParent->appendChild(pText,& pNode)

    e)创建// Create a processing instruction element.
    BSTR bstrTarget = SysAllocString(L"xml");
    BSTR bstrData = SysAllocString(L"version='1.0'");
    pDoc ->createProcessingInstruction(bstrTarget, bstrData, &pProcessingInstruction);
    SysFreeString(bstrTarget);
    SysFreeString(bstrData);

    f)创建注释节点
    pDoc->createComment(bstrText, &pComment);

    g)元素节点属性值
    得到属性值
    VARIANT v;
    pEle->getAttribute(bstrName,&v);
    CString str = v.bstrVal;
    设置属性值
    CComVariant v(str);
    pEle->setAttribute(bstrName, v);

    h)节点属性值
    VARIANT v;
    CString str;
    long mCount;
    得到节点属性集
    hr=pNod->get_attributes(&pNodeMap);
    hr=pNodeMap->get_length(&mCount);
    得到节点属性
    hr=pNodeMap->getNamedItem(bstrName,&pNode);
    pNodeMap->get_item(i,&pNode);
    得到节点属性值
    hr=pNode->get_nodeValue(&v);
    str =v.bstrVal;
    删除节点属性
    MSXML2::IXMLDOMNode *moldNode;
    mNodeMape->removeNamedItem(bstrName,&moldNode);
    if (moldNode!=NULL) moldNode->Release();

    i)节点
    (1)得到节点、节点集
    根据节点名称
    pDoc->getElementsByTagName(bstrName,&pNodeList);
    pNodeList->get_item(0,&pNode);
    得到子节点集
    hr=pNod->get_childNodes(&mNodeList);
    long mCount;
    MSXML2::IXMLDOMNode *pNodeSub;
    mNodeList->get_length(&mCount);
    hr=pNode->get_firstChild(&pNodeSub);
    删除子节点(包含删除节点属性、子节点、当前节点)
    删除当前子节点
    pNodeList->get_item(i,&pNode);
    pNod->removeChild(pNode,&moldNode);
    moldNode->Release();

    (2)根据节点得到节点名称
    pNod->get_nodeName(&bstrName);
    (3)根据节点得到节点值
    VARIANT v;
    hr=pNod->get_nodeValue(&v);


    j)XML文件操作
    加载
    VARIANT_BOOL status;
    VARIANT vFileName;
    (1)
    pDoc->loadXML(bstrName,&status);
    (2)
    V_BSTR(&vFileName) = strFileName.AllocSysString();
    V_VT(&vFileName) = VT_BSTR;
    vResult = pDoc->load(vFileName,&status);
    保存
    BSTR pBFName = mFileName.AllocSysString();
    CComVariant v(pBFName);
    hr=pDoc->save(v);


    BSTR bstr = NULL;
    pDoc->get_xml(&bstr);


    k)错误处理
    BSTR bstr = NULL;
    pDoc->get_parseError(&pObjError);
    pObjError->get_reason(&bstr);
    AfxMessageBox(_T("Failed to load DOM from books.xml. %S\n"),*bstr);


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/9/20 10:23:00
     
     落花落叶落飞扬 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:21
      积分:133
      门派:XML.ORG.CN
      注册:2005/7/4

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给落花落叶落飞扬发送一个短消息 把落花落叶落飞扬加入好友 查看落花落叶落飞扬的个人资料 搜索落花落叶落飞扬在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看落花落叶落飞扬的博客2
    发贴心情 
    你真是我的偶像,多谢!
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/9/23 14:17:00
     
     stevenbj 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:60
      门派:XML.ORG.CN
      注册:2005/9/30

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给stevenbj发送一个短消息 把stevenbj加入好友 查看stevenbj的个人资料 搜索stevenbj在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看stevenbj的博客3
    发贴心情 
    求教cloneNode的问题:
    当被复制的节点含有子节点时,虽然deep设为TRUE,可是子节点不能被成功复制,
    这是为什么呢?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/9/30 10:10:00
     
     zz277 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:24
      积分:127
      门派:XML.ORG.CN
      注册:2006/4/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给zz277发送一个短消息 把zz277加入好友 查看zz277的个人资料 搜索zz277在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看zz277的博客4
    发贴心情 
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/4/16 16:48:00
     
     sjz2006 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:25
      积分:117
      门派:XML.ORG.CN
      注册:2006/7/13

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给sjz2006发送一个短消息 把sjz2006加入好友 查看sjz2006的个人资料 搜索sjz2006在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看sjz2006的博客5
    发贴心情 
    盯到底
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/19 20:16:00
     
     luna531zm 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:1
      积分:60
      门派:XML.ORG.CN
      注册:2006/7/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给luna531zm发送一个短消息 把luna531zm加入好友 查看luna531zm的个人资料 搜索luna531zm在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看luna531zm的博客6
    发贴心情 
    MSXML::IXMLDOMDocumentPtr pDoc;  

    HRESULT hr =pDoc.CreateInstance(__uuidof(MSXML::DOMDocument));

    这样写是不是有问题啊....别人的代码...感觉好象没有初始化....

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/7/20 16:43:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DOM/SAX/XPath 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/12 17:20:34

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

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