I.Простой способ :
Это преобразование:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:org="some:org" exclude-result-prefixes="org">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="org:specs">
<xmp>
<xsl:copy-of select="."/>
</xmp>
</xsl:template>
</xsl:stylesheet>
при применении к этому XML-документу (предоставленный некорректно сформированный текст сделал хорошосформированный XML-документ):
<t xmlns:org="some:org">
<org:specs>
<org:wild animal="6" species="land"/>
<org:fish animal="7" species="water"/>
<org:bird animal="8" species="trees"/>
<org:mammal animal="9" species="land"/>
</org:specs>
</t>
производит :
<xmp>
<org:specs xmlns:org="some:org">
<org:wild animal="6" species="land"/>
<org:fish animal="7" species="water"/>
<org:bird animal="8" species="trees"/>
<org:mammal animal="9" species="land"/>
</org:specs>
</xmp>
, и это отображается в браузере требуемым образом :
<org:specs xmlns:org="some:org">
<org:wild animal="6" species="land"/>
<org:fish animal="7" species="water"/>
<org:bird animal="8" species="trees"/>
<org:mammal animal="9" species="land"/>
</org:specs>
II.Prety-выглядящий, отображаемый браузером XML
См. Код XSLT XPath Visualizer , как это приложение дает такой результат.
III.Генерация всех необходимых входных данных для браузера в виде текста (method="text"
):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:template match="/*">
<xsl:apply-templates select="*[1]" mode="textify"/>
</xsl:template>
<xsl:template match="*/*[*]" mode="textify">
<xsl:text>&lt;</xsl:text>
<xsl:value-of select="name()"/>
<xsl:apply-templates select="@*" mode="textify"/>
<xsl:text>></xsl:text>
<xsl:apply-templates select="*|text()" mode="textify"/>
<xsl:text>&lt;/</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>></xsl:text>
</xsl:template>
<xsl:template match="*/*[not(node())]" mode="textify">
<xsl:text>&lt;</xsl:text>
<xsl:value-of select="name()"/>
<xsl:apply-templates select="@*" mode="textify"/>
<xsl:text>/></xsl:text>
</xsl:template>
<xsl:template match="@*" mode="textify">
<xsl:text> </xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>="</xsl:text>
<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
</xsl:template>
<xsl:template match="text()" mode="textify">
<xsl:call-template name="textify">
<xsl:with-param name="pText" select="."/>
</xsl:call-template>
</xsl:template>
<xsl:template name="textify">
<xsl:param name="pText"/>
<xsl:if test="string-length($pText) >0">
<xsl:variable name="vChar" select="substring($pText,1,1)"/>
<xsl:choose>
<xsl:when test="$vChar = ' '">
<xsl:value-of select="'&#xA0;'"/>
</xsl:when>
<xsl:when test="$vChar = '	'">
<xsl:value-of select="'&#xA0;&#xA0;'"/>
</xsl:when>
<xsl:when test="$vChar = '
'">
<xsl:value-of select="'<br />'"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$vChar"/>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="textify">
<xsl:with-param name="pText" select=
"substring($pText, 2)"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
, когда это преобразование применяется к тому же XML-документу (см. Выше), оно дает желаемый результат:
<org:specs><br />  <org:wild animal="6" species="land"/><br />  <org:fish animal="7" species="water"/><br />  <org:bird animal="8" species="trees"/><br />  <org:mammal animal="9" species="land"/><br /></org:specs>
и отображается браузером как :