本人菜鸟,刚接触vc,望各位帮忙,给一点思路本人要写这样一个函数:
BOOL GetSubNodes(XNode node, XNodeArray & arr)
struct XNode 
{
CString strMakeup;//标志名
CString strField;//标志中间的部分
};
typedef CArray<XNode*, XNode*> XNodeArray;函数功能:获得节点中包含的子节点列表。
返回值: 子节点列表。
参数:    
参数数据类型     备注
nodeXNode     节点结构体
arrXNodeArray    子节点列表例如:
XNode x; 
x.strMakeup="FRAME”;
x.strField=”<BT>标题</BT><YJBT>一级标题</YJBT><ZW>正文</ZW><YJBT>一级标题</YJBT><ZW>正文</ZW><YJBT>一级标题</YJBT><QDFA>启动方案</QDFA>”;
XNodeArray arr;
GetSubNodes(x,arr) ;
则有输出结果
b.GetAt(0)->strField =”标题”;
b.GetAt(0)->strMakeup =”BT”;
b.GetAt(6)->strField =”启动方案”;
b.GetAt(6)->strMakeup =”QDFA”;
各位能不能给个思路,可能用到那些类??
谢了~~

解决方案 »

  1.   

    用 MS 的 XMLDOM ,
      

  2.   

    用 MS 的 XMLDOM ??
    不太明白
    我是要用vc来写
    只能用MFC中的类
      

  3.   

    这个函数还不好写啊?
    饿的天啊结构不是已经定义出来了吗,然后就可以用C++写了
    不需要任何MFC的类如果你想用的话就要重新定义结构了
      

  4.   

    http://www.codeproject.com/soap/msxmlcpp.asp
      

  5.   

    CEmrXml::CEmrXml(const CString& strXml)
    {
    ::CoInitialize(NULL);
    this->m_pDomDocument2 = NULL;
    HRESULT hr = m_pDomDocument2.CreateInstance(__uuidof(MSXML2::DOMDocument30));
    //装载xml串
        hr = this->m_pDomDocument2->loadXML(strXml.AllocSysString());
    }CEmrXml::~CEmrXml()
    {
    if(this->m_pDomDocument2 != NULL)
    {
    this->m_pDomDocument2.Detach();
    }}/*-----------------------------------
      @function:  在xml文件中根据元素的编码取得text.
      @para1:   元素编码
      @para2:   对应的值
      @return : 成功返回true, 失败false;
      @example: 
        例如:<code>xxxx</code>, 调用 GetNodeText("code", strText);
    结果就把"xxxx" 赋给csText;
    ---------------------------------------*/
    BOOL CEmrXml::GetNodeText(CString csNode, CString &strText)
    {
    MSXML2::IXMLDOMNodePtr pNode = NULL;  
    csNode = "//"+csNode;
    pNode = this->m_pDomDocument2->selectSingleNode(csNode.AllocSysString()); if(pNode!=NULL)
    {
    BSTR text = NULL;
    HRESULT hr = pNode->get_text(&text);  
    if(SUCCEEDED(hr) && text!=NULL)
    {
        strText = static_cast<CString>(text);
    ::SysFreeString(text);
    return TRUE;
    }
    }
    return FALSE;
    }