Преобразование XML между схемами - XSLT или Объекты? - PullRequest
0 голосов
/ 13 февраля 2009

Дано:

  • Две похожие и сложные схемы, назовем их XmlA и XmlB.
  • Мы хотим конвертировать из XmlA в XmlB
  • Не вся информация, необходимая для создания XmlB, содержится в составе XmlA (потребуется поиск в базе данных)

Могу ли я использовать XSLT для этого, учитывая, что мне нужно будет ссылаться на дополнительные данные в базе данных? Если да, то каковы аргументы в пользу использования XSLT, а не простого старого сопоставления и преобразования объектов? Я думаю, что следующие критерии могут повлиять на это решение:

  • Производительность / скорость
  • Использование памяти
  • Повторное использование кода / удобство

Проект будет основан на C #.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 13 февраля 2009

С C # вы всегда можете предоставить объекты расширения для преобразований XSLT, так что это не проблема.

Трудно сказать качественно, не имея в руках схемы и XML, но я полагаю, что скомпилированное преобразование будет быстрее, чем сопоставление объектов, поскольку вам придется изрядно изобретать колесо.

Кроме того, одним из огромных преимуществ XSLT является его ремонтопригодность и портативность. Вы сможете очень быстро адаптировать документ XSLT с изменениями схемы и на лету, не выполняя никаких перестроек и изменений, если вы отслеживаете файл.

Может пойти в любом случае, основываясь на том, что вы нам дали.

2 голосов
/ 13 февраля 2009

Мой вопрос: насколько вероятно изменение набора трансформаций?

Если они не сильно изменятся, я предпочитаю делать все это в одном теле исходного кода - здесь это будет C #. Для такого рода вещей я бы использовал сгенерированные классы сериализации XSD.exe (инструмент .NET XSD) вместе со слоями данных.

С другой стороны, если набор преобразований может измениться - или, возможно, потребуется «исправить» после установки - тогда я бы предпочел комбинацию расширений XSLT и C # для XSLT. Механизм расширения прост, и если вы используете тип XslCompiledTransform, производительность будет довольно хорошей.

1 голос
/ 13 февраля 2009

Если данные не в xml, то xslt будет проблемой. Вы можете предоставить дополнительные документы с xsl:document() или использовать методы расширения xslt (но это не очень хорошо поддерживается между поставщиками). Так что, если вы не настроены на xslt, это не похоже на хороший вариант в этом случае (хотя я большой поклонник xslt при правильном использовании).

Итак: я бы, вероятно, использовал обычный императивный код - потоковую передачу (IEnumerable<T>), если это возможно. Конечно, если у вас нет много данных, такие нюансы не имеют значения.

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