$('').text('This is fun & stuff').html(); // "This is fun & stuff"
Источник: http://debuggable.com/posts/encode-html-entities-with-jquery:480f4dd6-13cc-4ce9-8071-4710cbdd56cb
Вот более сложный подход, который группирует элементы по их количеству; заметьте, однако, что это предполагает, что имя элемента не будет содержать никаких цифр, кроме номера группы в конце.
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="field-by-group" match="*" use="translate(name(), translate(name(), '0123456789', ''), '')" />
<xsl:template match="/results">
<xsl:copy>
<xsl:copy-of select="status | info"/>
<products>
<xsl:for-each select="*[starts-with(name(), 'prod')]">
<product>
<xsl:for-each select="key('field-by-group', substring-after(name(), 'prod'))">
<xsl:element name="{translate(name(), '0123456789', '')}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</product>
</xsl:for-each>
</products>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Если структура ввода постоянна, я бы воспользовался этим, вместо того, чтобы пытаться группировать по конечному числу.
Например, вы можете сделать:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/results">
<xsl:copy>
<xsl:copy-of select="status | info"/>
<products>
<xsl:for-each select="*[starts-with(name(), 'prod')]">
<product>
<prod>
<xsl:value-of select="." />
</prod>
<pub>
<xsl:value-of select="following-sibling::*[1]" />
</pub>
<sub>
<xsl:value-of select="following-sibling::*[2]" />
</sub>
<subtype>
<xsl:value-of select="following-sibling::*[3]" />
</subtype>
</product>
</xsl:for-each>
</products>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>