Havn't found best soultion to pretty print XML: REXML: It has pp functionality, but it wrap elements like <a>content</a> to <a> content </a> Nokogiri: there is a approch to pp, see ex: # Pretty print XML require "nokogiri" def write(buffer) xsl =<<XSL <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="/"> <xsl:copy-of select="."/> </xsl:template> </xsl:stylesheet> XSL doc = Nokogiri::XML(buffer) xslt = Nokogiri::XSLT(xsl) out = xslt.transform(doc) out.to_xml end But nokogiri has another problem, which unwrap CDATA. Any better solution? Thanks. And apologize for my poor english.
on 2011-01-11 08:35
on 2011-01-12 01:53
0 resp. ToT
on 2011-01-13 00:19
Sorry if you haven't got any help, could you provide more informations to the output you want ? There are many ways to indent XML code. Maybe you don't want to wrap lines with <a>content</a>, but what if the content is longer ? Do you have a column limit ? In your place, I would take the pp code of nokogiri and tweak it until it gives me what I want. Hope that help, zimbatm 2011/1/12 Pk Z. <email@example.com>:
on 2011-01-13 01:05
In my experience, everyone has a different definition of "pretty printing". If you want to get more specific about what you'd like to see, perhaps people can give you a more specific answer.
on 2011-09-01 20:55
""But nokogiri has another problem, which unwrap CDATA."" You can't preserve CDATA or !ENTITY using XSLT. The XML parser will expand them, and there is absolutly no way to prevent it. (It causes many headaches for me.) You would have to do it strictly with regular expressions, treating the XML as text.