Как сделать потоковое чтение большого XML-файла в C# 3.5

Проблема заключается в том, что у Firebase есть ошибка, которая после проверки подлинности вам нужно подождать, пока пользователь не появится в FirebaseAuth, а затем вы сможете ее использовать.

Что я сделал, как

Observable.fromCallable(() -> signInImpl())
        .map(this::toFirebaseUser)
        .map(this::waitForUserToAppearInAuthenticator)
        .flatMap(this::doSomethingInDatabase);

, где

@NonNull
private FirebaseUser waitForUserToAppearInAuthenticator(@NonNull final FirebaseUser user) {
    final CountDownLatch cdl = new CountDownLatch(1);
    final FirebaseAuth.AuthStateListener l = firebaseAuth -> {
        final FirebaseUser cu = firebaseAuth.getCurrentUser();
        if (cu != null && user.getUid().equals(cu.getUid())) {
            cdl.countDown();
        }
    };
    mFirebaseAuth.addAuthStateListener(l);
    try {
        cdl.await(20, TimeUnit.SECONDS);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    } finally {
        mFirebaseAuth.removeAuthStateListener(l);
    }

    return user;
}
10
задан Stephen Turner 19 September 2016 в 13:26
поделиться

6 ответов

Движение с синтаксическим анализатором элемента стиля SAX и классом XmlTextReader создается с XmlReader. Создайте была бы хорошая идея, да. Вот немного измененный пример кода от CodeGuru:

void ParseURL(string strUrl)
{
  try
  {
    using (var reader = XmlReader.Create(strUrl))
    {
      while (reader.Read())
      {
        switch (reader.NodeType)
        {
          case XmlNodeType.Element:
            var attributes = new Hashtable();
            var strURI = reader.NamespaceURI;
            var strName = reader.Name;
            if (reader.HasAttributes)
            {
              for (int i = 0; i < reader.AttributeCount; i++)
              {
                reader.MoveToAttribute(i);
                attributes.Add(reader.Name,reader.Value);
              }
            }
            StartElement(strURI,strName,strName,attributes);
            break;
            //
            //you can handle other cases here
            //
            //case XmlNodeType.EndElement:
            // Todo
            //case XmlNodeType.Text:
            // Todo
            default:
            break;
          }
        }
      }
      catch (XmlException e)
      {
        Console.WriteLine("error occured: " + e.Message);
      }
    }
  }
}
9
ответ дан 3 December 2019 в 22:03
поделиться

Я не могу добавить комментарий, так как я просто подписался, но пример кода, отправленный Hirvox, и в настоящее время выбирал, поскольку ответ имеет ошибку в нем. Это не должно иметь new оператор при использовании помех Create метод.

Текущий:

using (var reader = new XmlReader.Create(strUrl))

Зафиксированный:

using (var reader = XmlReader.Create(strUrl))
7
ответ дан 3 December 2019 в 22:03
поделиться

Вот, практическое руководство: http://support.microsoft.com/kb/301228/en-us Просто помнит, что Вы не должны использовать XmlTextReader, но вместо этого XmlReader в сочетании с XmlReader. Создать

0
ответ дан 3 December 2019 в 22:03
поделиться

Я думаю, что не возможно, если Вы хотите использовать объектную модель (т.е. XElement\XDocument) для запросов XML. Очевидно, Вы не можете создать дерево объектов XML, не считывая достаточно данных. Однако можно использовать класс XmlReader.

Класс XmlReader читает данные XML из потока или файла. Это обеспечивает некэшируемый, передайте только, доступ только для чтения к данным XML.

0
ответ дан 3 December 2019 в 22:03
поделиться

Я смущен упоминанием о "xs:sequence" - это - элемент XML-схемы.

Вы пытаетесь открыть большой файл схемы XML? Вы открыты большой XML-файл, который основан на той схеме? Или Вы пытаетесь открыть большой XML-файл и проверить его одновременно?

Ни одна из этих ситуаций не должна предоставлять Вам проблему с помощью стандартного XmlReader (или XmlValidatingReader).

Чтение XML с XMLReader: http://msdn.microsoft.com/en-us/library/9d83k261 (по сравнению с 80) .aspx

0
ответ дан 3 December 2019 в 22:03
поделиться

Тот пример кода пытается превратить код стиля XmlReader в код стиля SAX - если бы Вы - написание кода с нуля, я просто использовал бы XmlReader, как это было предназначено - Получение по запросу не Нажатие.

0
ответ дан 3 December 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: