Это странное требование.
Поскольку XSLT работает с анализируемой моделью документа, вы не можете сделать это надежно. В частности, различие между эквивалентными обозначениями обязательно будет потеряно. Эквивалентные обозначения включают такие вещи, как <tag></tag>
против <tag/>
или é
против é
.
При этом общий подход, который может сработать, заключается в использовании атрибута mode
xsl:template
и xsl:apply-template
для переключения в режим, который явно отображает все элементы в виде текста. По сути, вы пишете XML-сериализатор в XSLT.
Одна проблема заключается в том, что вам придется дважды экранировать специальные символы, такие как <>"'
, когда они присутствуют в значениях атрибутов и текстовых узлах. И XSLT довольно неэффективен при подобном разбрасывании строк.
Другая проблема заключается в разумном отображении префиксов пространства имен. Вы почти наверняка можете сделать это, но это будет довольно ужасно.