以前实习期间写的一段mfc编程,对数据库和xml格式文档的相关操作 主要相关代码 之四 读取xml格式文档到界面

void CXMLwithSQLDlg::OnBnClickedCread()
{
    CFileException e;
    CString strFileName;
    for(int i = 0;i < MAX_COLCOUNT;i++)
    {
        m_list.DeleteColumn(0);
    }
    m_list.DeleteAllItems();
    /*初始化listcontrol控件*/
    m_list.InsertColumn(0, "LogID");//插入列
    m_list.InsertColumn(1, "Node");
    m_list.InsertColumn(2, "NodeID");
    m_list.InsertColumn(4, "ComPuterName");
    m_list.InsertColumn(5, "UserName");
    m_list.InsertColumn(6, "Department");
    m_list.InsertColumn(7, "Program");
    m_list.InsertColumn(8, "Facility");
    m_list.InsertColumn(9, "ObjectName");
    m_list.InsertColumn(10, "Details");
    m_list.InsertColumn(11, "Result");
    m_list.InsertColumn(12, "EntryStamp");
    m_list.InsertColumn(13, "Level");
    m_list.InsertColumn(14, "Type");
    m_list.InsertColumn(15, "ProductType");
    m_list.InsertColumn(16, "BehaviourType");
    m_list.InsertColumn(17, "Reservation");
    CRect rect18;
    m_list.GetClientRect(rect18);
    m_list.SetColumnWidth(0, rect18.Width()/6);
    m_list.SetColumnWidth(1, rect18.Width()/6);
    m_list.SetColumnWidth(2, rect18.Width()/6);
    m_list.SetColumnWidth(3, rect18.Width()/6);
    m_list.SetColumnWidth(4, rect18.Width()/6);
    m_list.SetColumnWidth(5, rect18.Width()/6);
    m_list.SetColumnWidth(6, rect18.Width()/6);
    m_list.SetColumnWidth(6, rect18.Width()/6);
    m_list.SetColumnWidth(7, rect18.Width()/6);
    m_list.SetColumnWidth(8, rect18.Width()/6);
    m_list.SetColumnWidth(9, rect18.Width()/6);
    m_list.SetColumnWidth(10, rect18.Width()/6);
    m_list.SetColumnWidth(11, rect18.Width()/6);
    m_list.SetColumnWidth(12, rect18.Width()/6);
    m_list.SetColumnWidth(13, rect18.Width()/6);
    m_list.SetColumnWidth(14, rect18.Width()/6);
    m_list.SetColumnWidth(15, rect18.Width()/6);
    m_list.SetColumnWidth(16, rect18.Width()/6);
    m_list.SetColumnWidth(17, rect18.Width()/6);
    //定义xml文档对象
    MSXML2::IXMLDOMDocumentPtr pDoc;
    //定义根节点对象
    MSXML2::IXMLDOMElementPtr xmlRoot;
    MSXML2::IXMLDOMElementPtr xmlNode;
    /*创建DOMDocument对象*/
    HRESULT hr = pDoc.CreateInstance(_uuidof(MSXML2::DOMDocument30));
    if(!SUCCEEDED(hr))
    {
        MessageBox("Error");
        return;
    }
    try
    {
        //读取xml格式路径选择字符串
        CFileDialog FileLog(TRUE,"xml",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"xml (*.xml)|*.xml|所有文件(*.*)|*.*||",NULL);

        if(FileLog.DoModal() == IDOK)
        {
            strFileName = FileLog.GetFileName();
        }
        //加载xml文档
        pDoc->load((char*)(_bstr_t)strFileName);
        //获取根节点
        xmlRoot = pDoc->GetdocumentElement();
        //定义一个节点连接对象
        MSXML2::IXMLDOMNodeListPtr nodeList = NULL;
        //单个节点属性值
        MSXML2::IXMLDOMNodePtr pAttrItem;
        //创建节点列表
        xmlRoot->get_childNodes(&nodeList);
        //获取节点数;
        long iCount;
        nodeList->get_length(&iCount);
        /*解析xml文档读取到界面上 */
        for(int i = 0;i < iCount/11;i++)
        {
            VARIANT varval;
            //把节点记录值传给pAttrItem
            nodeList->get_item(0+i*11, &pAttrItem);
            //获取节点的值
            pAttrItem->get_nodeTypedValue(&varval);
            CString strValue = (char*)(_bstr_t) varval;
            //节点值添加到控件中
            m_list.InsertItem(i, strValue);
            /* 遍历子节点中的子节点*/
            nodeList->get_item(1+i*11, &pAttrItem);
            MSXML2::IXMLDOMNodeListPtr nodeList1 = NULL;
            MSXML2::IXMLDOMNodePtr pAttrItem1;
            pAttrItem->get_childNodes(&nodeList1);
            long iCount1;
            nodeList1->get_length(&iCount1);//获取节点数;
            for(int j = 0;j < iCount1;j++)
            {
                nodeList1->get_item(j, &pAttrItem1);
                pAttrItem1->get_nodeTypedValue(&varval);
                CString strValue1 = (char*)(_bstr_t) varval;
                m_list.SetItemText(i, j+1, strValue1);
            }
            //
            nodeList->get_item(2+i*11, &pAttrItem);
            MSXML2::IXMLDOMNodeListPtr nodeList2=NULL;
            MSXML2::IXMLDOMNodePtr pAttrItem2;
            pAttrItem->get_childNodes(&nodeList2);
            long iCount2;
            nodeList2->get_length(&iCount2);
            for(int m = 0;m < iCount2;m++)
            {
                nodeList2->get_item(m, &pAttrItem2);
                pAttrItem2->get_nodeTypedValue(&varval);
                CString strValue2 = (char*)(_bstr_t) varval;
                m_list.SetItemText(i,m+8,strValue2);
            }
            
            int f = 9;
            for(int n = 3+i*11;n < 11+i*11;n++)
            {
                nodeList->get_item(n, &pAttrItem);
                pAttrItem->get_nodeTypedValue(&varval);
                CString strValue3 = (char*)(_bstr_t) varval;
                m_list.SetItemText(i, f, strValue3);
                f++;
            }
        }
        //AfxMessageBox("读取成功");
        //释放内存
        pDoc.Release();
    }
    catch (_com_error e)
    {
        AfxMessageBox("读取失败");
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值