C # XslCompiledTransform, используя XmlDocument или XPathDocument, когда требуется редактирование? - PullRequest
1 голос
/ 14 декабря 2009

Я собираюсь сделать пару предположений здесь:

  1. XPathDocument не редактируется.
  2. XmlDocument доступен для редактирования.
  3. XPathDocument более эффективен для XslCompiledTransform.

В таком случае (и, пожалуйста, исправьте меня, если я ошибаюсь), было бы лучше (более эффективно):

  1. Вносить изменения, используя XmlDocument, а затем преобразовать в XPathDocument перед преобразованием. Есть ли оптимизированный способ сделать это?
  2. Просто придерживайтесь XmlDocument через преобразование.

Некоторый фон, я получаю сложный xml от веб-сервиса, затем использую xpath, чтобы найти некоторые элементы, которые необходимо изменить, а затем использую xslt для создания html.

Заранее спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 14 декабря 2009

Это зависит от того, сколько изменений требуется, насколько велики данные и знакомы ли вы с xslt. Если «не» до последнего, просто используйте XDocument и т. Д. (В последний раз, когда я запускал профиль, XDocument был быстрее, чем XmlDocument для моих данных - запустите свои собственные тесты). Используйте XDocument.Load / XDocument.Parse, найдите свой узел, отредактируйте его и сохраните.


Если вы должны использовать xslt, тогда XDocument на самом деле не вариант; как только вы загрузите его в XmlDocument, вы также можете остаться с XmlDocument - я бы не рекомендовал разбирать его в секунду DOM.

Конечно, это заставляет задуматься: зачем модифицировать xml вне xslt, если вы собираетесь использовать xslt; возможно просто перевести во время xslt?

Чтобы получить 100% точный ответ для ваших данных , вам, конечно, нужно его профилировать. Но такие вещи, как правильное использование группирующих конструкций xslt, часто дают намного большую разницу, чем XmlDocument против XPathDocument.

1 голос
/ 14 декабря 2009

Просто используйте класс XmlDocument для преобразования. Это должен быть массивный документ, чтобы действительно увидеть прирост производительности. Возможно, вы захотите скомпилировать статический экземпляр класса XslCompiledTransform, если планируете использовать его несколько раз.

...