Быстрое определение пространства имен Xml - PullRequest
0 голосов
/ 17 мая 2010

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

У меня есть куча XSD-файлов, которые являются внутренними для нашего приложения, у нас есть около 20-30 XML-файлов, которые реализуют наборы данных на основе этих XSD. Некоторые XML-файлы имеют небольшой размер (<100 КБ), другие занимают около 3-4 МБ, а некоторые - более 10 МБ. </p>

Мне нужно найти способ выяснить, каково пространство имен этих Xml-файлов, чтобы обеспечить (что-то вроде) intellisense на основе XSD. Реализация этого не проблема - другой разработчик написал код для этого.

Но я не уверен, что лучший (и самый быстрый!) Способ определения пространства имен - без использования XmlDocument (который выполняет полный анализ).

Я использую C # 3.5, и документы поступают в виде потока (некоторые из них являются удаленными файлами). Все файлы * .xml (я могу определить, было ли это основано на расширении), но, к сожалению, пространство имен Xml - единственный способ.

Сейчас я попробовал XmlDocument, но обнаружил, что он неэффективен и медленен, так как большие документы ожидают анализа (даже документы размером 100 КБ).

public string GetNamespaceForDocument(Stream document);

Что-то похожее на вышесказанное - подпись моего метода - перегрузки включают строку для «содержимого». Будет ли шаблон RegEx (скомпилированный) хорошим?

Как Visual Studio справляется с этим так эффективно? Другой колледж сказал мне, чтобы я нашел быстрый синтаксический анализатор Xml в C / C ++, проанализировал содержимое и получил заглушку, которая возвращает пространство имен как более медленное в .NET, это хорошая идея?

1 Ответ

2 голосов
/ 17 мая 2010

Вы можете использовать XmlReader , который использует метод «pull» для чтения XML (аналогично методу SAX «push», но немного проще для кодирования). Важно то, что вам не нужно читать весь файл перед тем, как возвращать его вам.

...