Выбор API, должен ли я вернуть XPathNavigator или XmlDocument - PullRequest
3 голосов
/ 06 октября 2010

Я создаю новый API для существующего сервиса.Методы в нем будут вызываться из XSLT в качестве расширений .net, однако я вижу, что мне нужно использовать тот же API для выполнения некоторых манипуляций .net XML.

Я пытался понять, как лучшенапиши это всю ночь.Чтобы он был дружественным к XSLT, я буду возвращать XML в объекте XPathNavigator, чтобы XSLT мог работать с ним сразу (вместо того, чтобы конвертировать его в набор узлов в XSLT. Но XPathNavigators заставляет меня содрогнуться, если я использую их из .netи я бы предпочел использовать XmlDocument (или XDocument) в любой день поверх XPathNavigator.

Итак, выбор, выбор, что возвращать?

Моя текущая мысль - написать все это для использования XmlDocumentsа затем напишите Wrapper, который будет использоваться XSLT, он просто вызовет основной API, а затем сгенерирует XPathNavigator из возвращенного XmlDocument. Это еще несколько обручей, через которые можно перейти, но это будет наиболее гибко.

Любые мысли о моих рассуждениях или если у вас есть какие-либо лучшие предложения.

Приветствия

Пит

Ответы [ 2 ]

4 голосов
/ 17 июля 2011

Методы, которые принимают или возвращают XML, должны отдавать предпочтение возврату XmlReader или XPathNavigator , если пользователь не должен иметь возможность редактировать XML данные, в этом случае следует использовать XmlDocument .

Источник : Рекомендации по представлению XML в .NET Framework (§ Методы, которые принимают ввод XML или возвращают XML как вывод)

2 голосов
/ 06 октября 2010

Я не просматривал весь API, но XmlDocument : XmlNode : IXPathNavigable

И, похоже, большинство функций XslTransform имеют перегрузки, которые принимают IXPathNavigable.

Итак, проверьте, охватывает ли это то, что вам нужно, но возврат IXPathNavigable может быть элегантным решением.

Семейство XDocument не очень дружелюбно к XSLT.

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