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

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 计算机科学论坛计算机技术与应用『 C/C++编程思想 』 → 高手帮帮忙:不能够在解析器中装载xML文档[求助] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 3164 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 高手帮帮忙:不能够在解析器中装载xML文档[求助] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     data 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:62
      门派:XML.ORG.CN
      注册:2006/3/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给data发送一个短消息 把data加入好友 查看data的个人资料 搜索data在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看data的博客楼主
    发贴心情 高手帮帮忙:不能够在解析器中装载xML文档[求助]

    以下程序在VC6.0下面编译没问题,可执行时确总说:"不能够在解析器中装载xML文档"
    #include <atlbase.h>  
    /*下面的.h文件是在安装了最新的
    XML Parser以后所包含的.h文件*/
    #include "C:\Program Files\Microsoft XML Parser SDK\inc\msxml2.h"
    #include <iostream>
    void main()
    {
    // 初始化COM接口
    CoInitialize(NULL);
    /*在程序中,假定装载的XML文件名称为
    xmldata.xml,缺省情况下它和可执行文件在同
    一个目录中。该文件的内容如下:  
    <?xml version="1.0"?>
    <xmldata>
    <xmlnode />
    <xmltext>Hello, World!</ xmltext>
    </xmldata>
    程序将寻找名为“xmlnode”的节点,插入一个新的名称为“xmlchildnode”的节点,然后它再去寻找一个名为“xmltext”的节点,然后提取包含在该节点中的文本并显示它,最后它把新的改变过的XML文档保存在名称为“updatexml.xml”的文档中。*/
    try {
    // 通过智能指针创建一个解析器的实例
    CComPtr<IXMLDOMDocument>spXMLDOM;
    HRESULT hr =spXMLDOM.CoCreateInstance(_uuidof(DOMDocument));
    if ( FAILED(hr) ) throw "不能创建XML Parser对象";
    if ( spXMLDOM.p == NULL ) throw  
    "不能创建XML Parser对象";

    // 创建成功,开始装载XML文档
    VARIANT_BOOL bSuccess = false;
    hr =spXMLDOM->load(CComVariant(L"test.xml"),&bSuccess);
    if ( FAILED(hr) ) throw "不能够在解析器中装载XML文档";
    if ( !bSuccess ) throw  "不能够在解析器中装载xML文档";
    // 检查并搜索"xmldata/xmlnode"
    CComBSTR bstrSS(L"xmldata/xmlnode");
    CComPtr<IXMLDOMNode>spXMLNode;
    /*用接口IXMLDOMDocument的
    selectSingleNode方法定位该节点。*/
    hr =spXMLDOM->selectSingleNode
    (bstrSS,&spXMLNode);
    if ( FAILED(hr) ) throw  
    "不能在XML节点中定位‘xmlnode’";
    if ( spXMLNode.p == NULL ) throw
    "不能在XML节点中定位‘xmlnode' ";
    /*DOM对象“spXMLNode”
    现在包含了XML节点<xmlnode>,
    所以我们可以在它下面创建一个子节点。*/
    CComPtr <IXMLDOMNode> spXMLChildNode;
    /*用接口IXMLDOMDocument的方法create
    Node方法创建一个新节点。*/
    hr = spXMLDOM->createNode( CComVariant(NODE_ELEMENT),
            CComBSTR("xmlchildnode"),
            NULL,
            &spXMLChildNode);
    if ( FAILED(hr) ) throw "不能创建'xmlchildnode' 节点";
    if ( spXMLChildNode.p == NULL )  
    throw "不能创建‘xmlchildnode' 节点";
    //添加新节点到spXMLNode节点下
    CComPtr <IXMLDOMNode> spInsertedNode;
    hr =spXMLNode->appendChild
    (spXMLChildNode,&spInsertedNode);
    if ( FAILED(hr) ) throw "不能创建‘xmlchildnode' 节点";
    if ( spInsertedNode.p == NULL ) throw "不能移动‘xmlchildnode' 节点";
    //设置新节点属性
    CComQIPtr <IXMLDOMElement> spXMLChildElement;
    spXMLChildElement = spInsertedNode;
    if ( spXMLChildElement.p == NULL )
    throw "不能在XML元素接口中查询到 'xmlchildnode' ";
    hr =spXMLChildElement->setAttribute
    (CComBSTR(L"xml"),CComVariant(L"fun"));
    if ( FAILED(hr) ) throw"不能插入新的属性";  
    /*下面的程序段用来寻找一个节点
    并显示该节点的相关信息。*/
    // 查找“xmldata/xmltext"节点
    // 释放先前的节点
    spXMLNode = NULL;  
    bstrSS = L"xmldata/xmltext";
    hr =spXMLDOM->selectSingleNode
    (bstrSS,&spXMLNode);
    if ( FAILED(hr) ) throw "不能定位‘xmltext'节点";
    if ( spXMLNode.p == NULL ) throw "不能定位‘xmltext'节点";
    // 得到该节点包含的文本并显示它
    CComVariant varValue(VT_EMPTY);
    hr =spXMLNode->get_nodeTypedValue
    (&varValue);
    if ( FAILED(hr) ) throw "不能提取‘xmltext'文本";
    if ( varValue.vt == VT_BSTR ) {
    /*显示结果。注意这里要把字符串
    从形式BSTR转化为ANSI。*/
    USES_CONVERSION;
    LPTSTR lpstrMsg = W2T (varValue.bstrVal);
    std::cout<< lpstrMsg << std::endl;
    } // if
    else {
    // 如果出现错误
    throw "不能提取‘xmltext'文本";
    } // else
    //将修改过的XML文档按指定的文档名保存
    hr = spXMLDOM->save(CComVariant
    ("updatedxml.xml"));
    if ( FAILED(hr) ) throw "不能保存修改过的XML文档";
    std::cout << "处理完成..." << std::endl << std::endl;
    } // try
    catch(char* lpstrErr) {
    // 出现错误
    std::cout << lpstrErr << std::endl << std::endl;
    } // catch
    catch(...) {
    // 未知错误
    std::cout << "未知错误..." << std::endl << std::endl;
    } // catch
    // 结束对COM的使用
    CoUninitialize();
    }
    在hr =spXMLDOM->load(CComVariant(L"test.xml"),&bSuccess); 插如断点后有如下提示:
    Loaded 'ntdll.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\ole32.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\oleaut32.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\lpk.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\usp10.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\uxtheme.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\msctf.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\clbcatq.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\comres.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\version.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\msxml3.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\shlwapi.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\winhttp.dll', no matching symbolic information found.

       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/3/21 21:15:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/26 0:42:38

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

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