Если вы используете msxml, он имеет документированное несоответствие со спецификацией xml и по умолчанию удаляет пробелы.Вы можете либо добавить xml:space="preserve"
к своему элементу, чтобы пустые места в этом файле были правильно обработаны, либо при вызове msxml через API (но не при непосредственном синтаксическом анализе xml в Internet Explorer) установить для его свойства preserveWhitespace значение true http://msdn.microsoft.com/en-us/library/windows/desktop/ms766466%28v=vs.85%29.aspx
Не имеет отношения к проблеме пробелов
<xsl:template match="//data/content">
<xsl:element name="{title}">
<xsl:apply-templates select="//data/content"/>
</xsl:element>
</xsl:template>
никогда не выполняется, так как соответствующий шаблону data
просто копирует весь документ, без рекурсивного применения шаблонов.Если бы он был выполнен, он бы работал бесконечно, как говорится, для каждого элемента содержимого, применяя шаблоны к каждому элементу содержимого.
ОБНОВЛЕНИЕ Если вам не нужно сохранять точное пустое пространство,просто вставив пробел, чтобы сделать его не пустым, вы можете исправить неисправный синтаксический анализ, вернув пробел обратно в таблицу стилей, сначала исправить вещи, чтобы шаблоны применялись рекурсивно, а затем иметь дополнительный шаблон для пустых элементов содержимого, делая их непустымидобавив пробел.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="content[not(node())]">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:text> </xsl:text>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>