Rhino said:
If you're simply looking to generate HTML within a Java program, as your
subject suggests, here is a simple Java class that does exactly that:
Today, to answer a question in another newsgroup, I wrote
an example to show how to do basic HTML-templating with a
small class using only standard J2SE operations.
public class Main
{
/* Assume, you have a basket of shopping items */
final static java.lang.String basket[] =
{ "bread <will cost only $2 tomorrow>",
"butter",
"cheese" };
/* And a template that is not restricted to a fixed
number of shopping items */
final static java.lang.String template =
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n" +
" \"
http://www.w3.org/TR/html4/strict.dtd\">\n" +
"<HTML>\n" +
" <HEAD>\n" +
" <TITLE>Warenkorb</TITLE>\n" +
" </HEAD>\n" +
" <BODY>\n" +
" <OL>\n" +
"$ware[[ <LI>$name\n]]" +
" </OL>\n" +
" </BODY>\n" +
"</HTML>\n" +
"\n";
/* notice that the template " <LI>$name\n" is given
for every $ware, implying a loop */
public static java.lang.String quoteCharacters
( final java.lang.String text )
{ final java.lang.StringBuilder stringBuilder =
new java.lang.StringBuilder( "" );
for( int i = 0; i < text.length(); )
{ int code = text.codePointAt( i ); i += Character.charCount( code );
if( code < ' ' || code > '~' || '<' == code ||
'>' == code || '&' == code || '\'' == code || '\"' == code )
{ stringBuilder.append( "&#" );
stringBuilder.append( code );
stringBuilder.append( ";" ); }
else
{ stringBuilder.appendCodePoint( code ); }}
return stringBuilder.toString(); }
public static java.lang.String wareI
( final java.lang.String template, final int i )
{ return java.util.regex.Matcher.quoteReplacement
( template.
replaceAll( "\\$name", java.util.regex.Matcher.quoteReplacement
( quoteCharacters( basket[ i ] )))); }
public static java.lang.String wares
( final java.lang.String template )
{ final java.lang.StringBuilder stringBuilder =
new java.lang.StringBuilder();
for( int i = 0; i < basket.length; ++i )
{ stringBuilder.append( "" + wareI( template, i )); }
return stringBuilder.toString(); }
public static java.lang.String ware
( final java.lang.String template )
{ java.util.regex.Pattern pattern =
java.util.regex.Pattern.compile( "(\\$ware)\\[\\[([^\001]*?)\\]\\]" );
java.util.regex.Matcher matcher = pattern.matcher( template );
java.lang.StringBuffer stringBuffer = new java.lang.StringBuffer();
while( matcher.find() )
{ final java.lang.String string = matcher.group( 2 );
matcher.appendReplacement
( stringBuffer, wares( string )); }
matcher.appendTail( stringBuffer );
return stringBuffer.toString(); }
public static void main( final java.lang.String[] args )
{ java.lang.String template;
template = ware( Main.template );
java.lang.System.out.println( template );
java.lang.System.out.println( basket ); }}
The output is:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"
http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Warenkorb</TITLE>
</HEAD>
<BODY>
<OL>
<LI>bread <will cost only $2 tomorrow>
<LI>butter
<LI>cheese
</OL>
</BODY>
</HTML>