0

我正在编写自定义函数来获取 XML 文件中的所有标签。我正在使用这段代码:

wchar_t *GetLine(wchar_t *fileName=L"indexing.xml", wchar_t endSymbol = '\n')
{
    SetFilePointer(hReadFile,sizeof(wchar_t) * position, NULL, FILE_BEGIN);
    int size;
    wchar_t wchr[1];
    DWORD dw;
    size = 0;
    do
    {
        ReadFile(hReadFile, wchr, sizeof(wchar_t), &dw, NULL);
        if(!dw)
        {
            break;
        }
        tempGetLine[size] = wchr[0];
        size++;
    }while(wchr[0] != endSymbol);
    tempGetLine[size] = '\0';
    position += (size);
    return tempGetLine;
}
wchar_t *GetTag(wchar_t *fileName = L"indexing.xml")
{
    wchar_t *temp = GetLine(fileName,'>');
    int i = 0;
    while(*temp != '\0')
    {
        tempTag[i] = *temp;
        i++;
        temp++;
    }
    tempTag[i] = '\0';
    return tempTag;
}

它可以工作,但在一个大文件中它需要很多迭代。如何优化我的代码?

4

2 回答 2

1

您可能应该考虑迁移到适当的解析器生成器。

用于此类任务的一个很好的 C++ 库是 boost spirit-qi,甚至还有一个 XML 示例。

http://www.boost.org/doc/libs/1_51_0/libs/spirit/doc/html/index.html

xml 示例

于 2012-10-28T13:34:28.060 回答
0

看起来您正在调用SetFilePointer()每个标签。如果您在两次调用之间没有对文件进行任何其他读取或写入操作GetTag(),则根本不要打扰调用SetFilePointer()。这是不必要的,并且此调用可能会减少操作系统完成的缓冲量。

于 2012-10-28T13:58:35.247 回答