Проблема не имеет ничего общего с начальным и конечным пробелом вокруг «теста», который XSLT автоматически сохранит, что бы вы ни говорили в xsl:strip-space
и xsl:preserve-space
.Скорее проблема заключается в ограничении в реализации Microsoft System.Xml.Xsl
xsl:strip-space
- ограничении, которое объясняется (не особенно хорошо) в вопросе, цитируемом @ RomanSS.
В основном, если вы предоставляете-встроенное дерево DOM в качестве входных данных для процессора XSLT, тогда требование в спецификации XSLT обрезать пробельные текстовые узлы довольно сложно, и похоже, что Microsoft ответила на вызов, введя ограничение.Другие способы удовлетворить это требование включают в себя:
(a) Изменить поставляемое дерево DOM на месте, чтобы удалить пробельные текстовые узлы
(b) Обернуть предоставленное дерево DOM в оболочку, которая делаеттекстовые узлы пропусков, невидимые при навигации по дереву
(c) Массовое копирование поставляемого дерева DOM в новое дерево, в котором пропущены текстовые узлы пропусков.
Саксонский использует все три стратегии при разницеобстоятельства;все они дорогие.Гораздо эффективнее выполнять удаление пустых пространств при разборе документа и построении дерева, что Microsoft заставляет вас делать, устанавливая ограничение.
Но ни одно из этого не имеет ничего общего с вашей проблемой.Если вы избавитесь от объявлений xsl:strip-space
и xsl:preserve-space
, пробел вокруг «test» будет сохранен так, как вы этого хотите.Объявления xsl:strip-space
и xsl:preserve-space
затрагивают только те текстовые узлы, которые полностью состоят из пробелов.