Переопределение или игнорирование необъявленных объектов в C # с использованием LINQ - PullRequest
6 голосов
/ 17 ноября 2011

У меня есть небольшая утилита, которая просматривает определенные вещи в файлах XML с помощью LINQ. Это обрабатывает МАССИВНУЮ коллекцию их довольно быстро и приятно. Тем не менее, около 20% определенной партии файлов не читаются и пропускаются из-за присутствия символа степени как ° в файлах. Это «Ссылка на необъявленную сущность« град »». предыдущий вопрос был о.

Решения, предложенные в предыдущем вопросе, не могут быть применены здесь напрямую. Я не имею права изменять файлы, и копирование их и замена экземпляров или вставка тегов в копии кажется неэффективным. Каков наилучший способ заставить LINQ игнорировать необъявленные сущности, которые в любом случае не имеют никакого отношения к тому, что делает моя программа? Или, может быть, есть хороший способ получить XDocument.Load для подачи некоторых объявлений сущностей заранее?

1 Ответ

2 голосов
/ 21 ноября 2011

К сожалению, сущности являются частью правил правильности XML ( 2.1 Правильно оформленные XML-документы ).Похоже, вы говорите, что хотите, чтобы XDocument.Load загрузил то, что условно является XML-файлом, но на самом деле не соответствует правилам, чего он не будет делать, вполне разумно.

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

Из ваших ограничений мне кажется, что самым подходящим подходом было бы следовать примеру, связанному с, и создать некоторый settings для перехода в XMLReader в соответствии с ( Проверка XML-документа в DOM ).

Если есть сущности, которые не определены и не перечислены в общедоступных схемах, вам необходимо создать собственную схему, которая определяет всесущности, которые вам нужны.Итак, создайте общий settings для XMLReader, который ссылается на вашу собственную, пользовательскую схему.Добавьте необходимые объекты в эту схему, так как определенные файлы не загружаются, и тогда вы создадите список всех объектов, которые вам нужно определить для правильности файлов XML.

Затем для каждогодокумент, который вы пытаетесь загрузить, создайте XMLReader для файла с помощью settings выше и вызовите перегрузку XDocument (XMLReader).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...