Я работаю с некоторыми сервисами .NET, которые могут обрабатывать значительно большие XML-документы, и мне нужно убедиться, что вся обработка выполняется в потоковом / конвейерном режиме.Я уже использую классы XmlReader
и XmlWriter
.Мой вопрос заключается в том, каков наилучший способ программно обеспечить фильтр для устройства чтения и записи (в зависимости от потока)?
(Я не ищу XSLT. Я уже много работаю с XSLT,и многие из вещей, которые я ищу, выходят за рамки XSLT - или, по крайней мере, реализация в XSLT не была бы идеальной.)
В Java & SAX это лучше всего будет обрабатывать через XMLFilterImpl
.Я не вижу, чтобы в .NET было что-то похожее для работы с XmlReader
.Я нашел этот пост в блоге "О создании пользовательских XmlReaders / XmlWriters в .NET 2.0, часть 2" , который включает следующее (я исправил первую ссылку из неработающей ссылки из исходного сообщения):
Идея в том, чтобы иметь класс-обертку утилиты, которая оборачивает XmlReader / XmlWriter и больше ничего не делает.Затем наследуйте от этого класса и замените интересующие вас методы. Эти служебные оболочки называются XmlWrapingReader и XmlWrapingWriter.Они являются частью пространства имен System.Xml, но, к сожалению, они являются внутренними - команда Microsoft XML решила сделать их общедоступными , но в спешке с релизом Whidbey решили отложить эту проблему.Хорошо, к счастью, эти классы, являющиеся чистыми обертками, не имеют никакой логики, поэтому любой, кто нуждается в них, действительно может создать их за 10 минут.Но чтобы сэкономить вам эти 10 минут, я выкладываю эти обертки здесь.Я включу XmlWrapingReader и XmlWrapingWriter в следующую библиотеку Mvp.Xml выпуск.
Эти 2 класса (XmlWrappingReader
и XmlWrappingWriter
) из библиотеки Mvp.Xml в настоящее время удовлетворит мои потребности.(В качестве дополнительного бонуса, это бесплатная библиотека с открытым исходным кодом, лицензированная BSD.) Однако из-за устаревшего статуса этого проекта у меня есть некоторые проблемы с включением этих классов в контрактный коммерческий проект разработки, который будетбыть переданным.Последний выпуск Mvp.Xml был 4,5 года назад в июле 2007 года. Кроме того, есть комментарий от «координатора проекта» в ответ на обсуждение этого проекта :
В любом случаеЭто больше не поддерживаемый проект.Все разработчики вышли.Но это с открытым исходным кодом, вы сами по себе.
Я также нашел SAX эквивалент в .Net , но SAXDotNet , похоже, небыть в любой лучшей форме - с его последним выпуском в 2006 году.
Я хорошо знаю, что устаревший проект не обязательно означает, что он менее полезен, и будет продвигаться вперед с оберткой 2классы из библиотеки Mvp.Xml - по крайней мере, на данный момент.
Есть ли лучшие альтернативы, которые я должен рассмотреть?(Опять же, любое решение не должно требовать, чтобы весь XML существовал в памяти в любой момент времени - будь то DOM, строка или иным образом.) Есть ли какие-либо другие доступные библиотеки (предпочтительно что-то из более активного проекта), илиМожет быть, что-то в рамках функций LINQ, которые будут соответствовать этим требованиям?