Если по
"xml уже загружен"
Вы имеете в виду, что он уже будет загружен в XPathDocument или XmlDocument, тогда производительность использования XPathNavigator или XmlReader будет такой же. Оба будут проходить через уже проанализированные узлы в памяти, представляющие модель данных XPath.
Основное различие между ними заключается в том, что XmlReader обеспечивает доступ только для пересылки, тогда как XPathNavigator обеспечивает доступ курсора к документу. Непосредственное взаимодействие с XmlReader очень полезно, если вы не хотите нести расходы на загрузку всего документа в памяти. В противном случае это не так полезно.
Я бы настоятельно рекомендовал использовать XPathNavigator.
Существует два основных способа взаимодействия с XPathNavigator:
- Создайте свой конечный автомат (используя if / elses). Одним из огромных преимуществ этого с XPathNavigator, а не с XmlReader, является то, что благодаря модели доступа к курсору в XPathNavigator ваш конечный автомат будет значительно проще. Пример: нужно посмотреть, есть ли у родителя определенный атрибут? Просто перейдите к нему и посмотрите.
- Используйте запросы XPath для поиска данных, которые вы ищете. Может быть не так быстро, но, вероятно, будет менее подвержен ошибкам, чем создание собственного конечного автомата. Конечно, для этого нужно разбираться в XPath.