<?xml version="1.0" ?> 
- <MF>
    <AdminPin>123456781234567812345678</AdminPin> 
    <UserPin>12345678</UserPin> 
    <CanDown>0</CanDown> 
    <AuthenPin /> 
    <Sense4Type>2.3版 单机版 32K</Sense4Type> 
    <MFLicense /> 
  - <DF>
      <ID>1233</ID> 
      <AdminPin>123456781234567812345678</AdminPin> 
      <UserPin>12345678</UserPin> 
      <Length>3000</Length> 
      <License /> 
    </DF>
-   <EF>
      <ID>1233</ID> 
      <Type>EXE</Type> 
      <ReadWrite /> 
      <Source>C:\SenseLock\EliteIV_V3.3\Samples\case study\sample_22\hardware\sample_22_hw.bin</Source> 
      <Length>0880</Length> 
      <Content>02066FE4900101F0A3F0A3F0A3042212FF002212FF0222</Content> 
      <RsaID /> 
      <CreateMode>导入</CreateMode> 
    </EF>
  - <DF>
      <ID>2131</ID> 
      <AdminPin>123456781234567812345678</AdminPin> 
      <UserPin>12345678</UserPin> 
      <Length>1111</Length> 
      <License /> 
    - <DF>
         <ID>2222</ID> 
         <AdminPin>123456781234567812345678</AdminPin> 
         <UserPin>12345678</UserPin> 
         <Length>0111</Length> 
         <License /> 
      </DF>
   </DF>
-  <DF>
     <ID>2321</ID> 
     <AdminPin>123456781234567812345678</AdminPin> 
     <UserPin>12345678</UserPin> 
     <Length>2222</Length> 
     <License /> 
  </DF>
</MF>以上是一个文件系统的xml信息,MF代表根目录,DF代表文件夹,EF代表可执行文件,
我现在想把xml里面的根目录和文件夹的id搜索出来,用树形控件动态生成与之匹配的树形目录。我的问题是:怎么去搜寻xml文件,再怎么生成树形目录?
我用的是TinyXml类。

解决方案 »

  1.   

    你可以参考下 codehelp 这个代码管理程序里面用的 XML 解析类,应该可以满足你的要求,它那个XML 类,是把每个不同的段里的值读取出来,因为那个xml 文件里有语法高亮的词、注释标记等,它能够区别并且读出来。 我觉得你可以参考下
      

  2.   

    推荐RapidXML,速度超快,和TinyXML不是一个数量级的
      

  3.   

    我给你找来了,BOOL CHEditCtrl::LoadXMLSettingsFromBuffer (const CString& strInBuffer)
    {
    RemoveXMLSettings (); CString strBuffer = strInBuffer; /////////////////////////////////////////////
    //新加的,读取XML的<NAME>
    //--------------
    // Read <NAME>:
    //--------------
    CString strName;
    if (ExcludeTag (strBuffer, _T("INFO"), strName))
    {
    ExcludeTag (strName, _T("ID"), strName, TRUE);
    ExcludeTag (strName, _T("NAME"), strName, TRUE);
    }
    if (strName.Find("Au")!=(-1)||strName.Find("au")!=(-1)||strName.Find("aU")!=(-1)||strName.Find("AU")!=(-1))
    {
    AU3=TRUE;
    } //////////////////////////////////////////// //--------------
    // Read options:
    //--------------
    CString strOptions;
    if (ExcludeTag (strBuffer, _T("OPTIONS"), strOptions))
    {
    ExcludeTag (strOptions, _T("WordDelimeters"), m_strWordDelimeters, TRUE);
    ExcludeTag (strOptions, _T("SpecialDelimiters"), m_strSpecialDelimiters, TRUE);
    // ExcludeTag (strOptions, _T("IntelliSenseChars"), m_strIntelliSenseChars, TRUE);
    } //-----------------
    // Read color data:
    //-----------------
    CString strColorData;
    if (ExcludeTag (strBuffer, _T("COLOR_DATA"), strColorData))
    {
    //---------------------------------
    // Read text and background colors:
    //---------------------------------
    CString strColor;
    if (ExcludeTag (strColorData, _T("EditTextColor"), strColor))
    {
    m_clrText = GetColorFromBuffer (strColor);
    } m_clrBack = RGB(255, 255, 255); // thinkry@2003-11-14
    if (ExcludeTag (strColorData, _T("EditBackColor"), strColor))
    {
    m_clrBack = GetColorFromBuffer (strColor);
    } if (ExcludeTag (strColorData, _T("SelTextColor"), strColor))
    {
    m_clrTextSelActive = GetColorFromBuffer (strColor);
    m_clrTextSelInActive = m_clrTextSelActive;
    } if (ExcludeTag (strColorData, _T("SelBackColor"), strColor))
    {
    m_clrBackSelActive = GetColorFromBuffer (strColor);
    m_clrBackSelInActive = m_clrBackSelActive;
    } //----------------
    // Read keywwords:
    //----------------
    CString strKeywords;
    if (ExcludeTag (strColorData, _T("KEYWORDS"), strKeywords))
    {
    BOOL bCaseSensitive = TRUE; CString strCaseSensitive;
    if (ExcludeTag (strKeywords, _T("CaseSensitive"), strCaseSensitive))
    {
    strCaseSensitive.MakeUpper ();
    bCaseSensitive = (strCaseSensitive == _T("TRUE"));
    } CString strColor;
    if (!ExcludeTag (strKeywords, _T("Color"), strColor))
    {
    ASSERT (FALSE);
    }
    else
    {
    COLORREF color = GetColorFromBuffer (strColor);
    COLORREF colorBack = (COLORREF) -1; CString strBackColor;
    if (ExcludeTag (strKeywords, _T("BackColor"), strBackColor))
    {
    colorBack = GetColorFromBuffer (strBackColor);
    } while (TRUE)
    {
    CString strKeyword;
    if (!ExcludeTag (strKeywords, _T("Keyword"), strKeyword))
    {
    break;
    } SetWordColor (strKeyword, color, colorBack, bCaseSensitive);
    }
    }
    } //------------
    // Read words:
    //------------
    CString strWords;
    if (ExcludeTag (strColorData, _T("WORDS"), strWords))
    {
    while (TRUE)
    {
    CString strWordData;
    if (!ExcludeTag (strWords, _T("WORD"), strWordData))
    {
    break;
    } CString strVal;
    if (!ExcludeTag (strWordData, _T("Val"), strVal))
    {
    ASSERT (FALSE);
    break;
    } CString strColor;
    if (!ExcludeTag (strWordData, _T("Color"), strColor))
    {
    ASSERT (FALSE);
    break;
    } COLORREF color = GetColorFromBuffer (strColor);
    COLORREF colorBack = (COLORREF) -1; CString strBackColor;
    if (ExcludeTag (strWordData, _T("BackColor"), strBackColor))
    {
    colorBack = GetColorFromBuffer (strBackColor);
    } BOOL bCaseSensitive = TRUE;
    CString strCaseSensitive; if (ExcludeTag (strWordData, _T("CaseSensitive"), strCaseSensitive))
    {
    strCaseSensitive.MakeUpper ();
    bCaseSensitive = (strCaseSensitive == _T("TRUE"));
    } SetWordColor (strVal, color, colorBack, bCaseSensitive);
    }
    } //-------------
    // Read blocks:
    //-------------
    CString strBlocks;
    if (ExcludeTag (strColorData, _T("BLOCKS"), strBlocks))
    {
    while (TRUE)
    {
    CString strBlockData;
    if (!ExcludeTag (strBlocks, _T("BLOCK"), strBlockData))
    {
    break;
    } CString strStart;
    if (!ExcludeTag (strBlockData, _T("Start"), strStart))
    {
    ASSERT (FALSE);
    break;
    } CString strEnd;
    ExcludeTag (strBlockData, _T("End"), strEnd); COLORREF color = (COLORREF)-1; CString strColor;
    if (ExcludeTag (strBlockData, _T("Color"), strColor))
    {
    color = GetColorFromBuffer (strColor);
    } COLORREF colorBack = (COLORREF) -1; CString strBackColor;
    if (ExcludeTag (strBlockData, _T("BackColor"), strBackColor))
    {
    colorBack = GetColorFromBuffer (strBackColor);
    } CString strIsWholeText;
    BOOL bIsWholeText = FALSE; if (ExcludeTag (strBlockData, _T("WholeText"), strIsWholeText))
    {
    strIsWholeText.MakeLower ();
    bIsWholeText = (strIsWholeText == _T("true"));
    } SetBlockColor (strStart, strEnd, bIsWholeText, color, colorBack);
    }
    }
    } return TRUE;
    }这个函数的参数 const CString& strInBuffer ,是把那个 XML 文件全部读进来存放的内存空间。
      

  4.   


    这个函数实现的是对读进来的 XML 文件的内容,获取各个字段的内容。我是说你可以参考这个函数来实现你要获取的每个目录名等,然后生成目录树结构。