[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: XML pretty printing in HTML

  • From: Matt Sergeant <matt.sergeant@b...>
  • To: "'Warren Hedley'" <w.hedley@a...>, xml-dev@i...
  • Date: Tue, 6 Jul 1999 10:52:20 +0100

xml pretty print
> -----Original Message-----
> From: Warren Hedley [mailto:w.hedley@a...]

> I'm on the lookout for a tool that will allow me to pretty print
> XML files in such a manner that they can be pasted into an HTML
> page. For example, I would like to transform
> 
> <element1 name="foo">
>   <element2 name="bar"
>             longName="barNone"/>
> </element1>
> 
> to (hope the line wrapping doesn't make this too confusing)
> 
> <pre style="font:12pt monospace">
> &lt;<font color="#ff0000">element1</font> <font 
> color="#00ff00">name</font>=&quot;<font
> color="#0000ff">bar</font>&quot;&gt;
> ...
> 
> You get the idea. All attributes are coloured red, attribute 
> values blue,
> element names green, CDATA yellow, etc. (Yuck, that looks hideous).
> Whitespace is preserved, so that "longName" is under "name" 
> in element2.
> 
> Preferably, all of this without having to do a bunch of 
> coding in XSL or
> otherwise. Surely, someone must have already done this - it would be a
> pretty simple PERL script given a well-formed file. I had a look on
> xmlsoftware.com but couldn't find anything.

OK. Here's an attempt:

use XML::Parser;

print XML::Parser->new(Handlers => {
	# Handlers using closures, except Start 'cos it's more complex.
	# $_[0] is the expat object where we store the HTML output
	Init => sub { $_[0]->{html} = '<pre style="font:12pt monospace">' },
	Final => sub { return $_[0]->{html} },
	Start => \&start,
	End => sub { $_[0]->{html} .= '&lt;/<font color="green">' . $_[1] .
'</font>&gt;' },
	Char => sub { $_[0]->{html} .= "<b>$_[1]</b>" },
	CdataStart => sub { $_[0]->{html} .= '<font color="yellow">' },
	CdataEnd => sub { $_[0]->{html} .= '</font>' },
	}
)->parsefile($ARGV[0]);

sub start {
	my $expat = shift;
	my $element = shift;
	my %attribs = @_;

	$expat->{html} .= '&lt;<font color="green">' . $element . '</font>';
	if (%attribs) {
		foreach (keys %attribs) {
			$expat->{html} .= ' <font color="red">' . $_ . 
				'</font>=&quot;<font color="blue">' .
				$attribs{$_}.
				'</font>&quot;';
		}
	}
	$expat->{html} .= '&gt;';
}

I've written it so it bundles up the HTML instead of printing it as it goes
so you can embed it in some other application (presumably you want to print
out something as well as just the XML - like a body and html tags), but you
could easily modify it. If using it in another app change the "print
XML::Parser..." for "my $html = XML::Parser..." and do something with $html.

Have fun.

BTW: An XML parser doesn't maintain any whitespace between attribute tags -
but I guess you could dump what I've done here for a large regexp system if
you really need that feature.

Matt.

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev@i...
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To (un)subscribe, mailto:majordomo@i... the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo@i... the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa@i...)



PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.