Эффективный способ извлечь два поля из большого XML-файла на C#C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Эффективный способ извлечь два поля из большого XML-файла на C#

Сообщение Anonymous »

Я хочу извлечь XML-файл из большого англо-немецкого словаря, структура которого выглядит следующим образом:

Код: Выделить всё

      

Ais


neut
n
sg



A

n


...
Английское слово находится внутри , и я рад взять первое немецкое слово внутри . Исходный XML-файл имеет размер 500 МБ. Я хочу сохранить вывод в файле, отличном от XML, который имеет формат: englishWord: GermanWord на строку. Я исключаю несколько записей слов в орте или в кавычках.
Мой код C#:

Код: Выделить всё

  string fileStr = File.ReadAllText( @"C:\deu-eng.xml" );
int quoteTagLength = "".Length;
StringBuilder sb = new StringBuilder();
int currIndex = 0;
bool foundSomething = true;
while (foundSomething)
{
foundSomething = false;
int i = fileStr.IndexOf( "", currIndex );
if (i > 0)  // found something
{
int i2 = fileStr.IndexOf( "", i + 6 );

currIndex = i2 + 1;
int qi = fileStr.IndexOf( "", currIndex );
if (qi > 0)
{
int qi2 = fileStr.IndexOf( "", qi + 8 );
if (qi2 > 0)
{
string word1 = fileStr.Substring( i + 6, i2 - (i + 6) );
string word2 = fileStr.Substring( qi + quoteTagLength - 1, qi2 - (qi + quoteTagLength) ) + 1;

if (!word1.Contains( " " ) && !word2.Contains( " " ))
{
sb.Append( word1  + " : " + word2 + Environment.NewLine );
}
foundSomething = true;
}
}
}
}
Но это происходит медленно. Как я могу это оптимизировать?
Мой метод уже должен быть быстрее, чем любой метод, использующий XMLReader, поскольку он движется только вперед и требует только пар двух типов полей и может безопасно игнорировать уровни вложенности. так что стек не нужен. Но я считаю, что это должно быть более эффективно, чем сейчас.

Подробнее здесь: https://stackoverflow.com/questions/788 ... in-c-sharp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»