<?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类。
{
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 文件全部读进来存放的内存空间。
这个函数实现的是对读进来的 XML 文件的内容,获取各个字段的内容。我是说你可以参考这个函数来实现你要获取的每个目录名等,然后生成目录树结构。