OK HTTP_NOT_ACCEPTABLE HTTP_INTERNAL_SERVER_ERROR :log
);
use XML::LibXML;
+use XML::LibXSLT;
use Text::Glob;
use CGI qw(:all -utf8);
use OpenSRF::Utils::JSON;
use OpenSRF::AppSession;
+use OpenSRF::Utils::SettingsClient;
+
+
+my $_parser = new XML::LibXML;
+my $_xslt = new XML::LibXSLT;
# BEGIN package globals
# you can weight them to control what matches requests for things like
# 'application/*'
+
+sub html_ish_output {
+ my ($r, $args, $xslt) = @_;
+ $args->{'stylesheet'} =
+ OpenSRF::Utils::SettingsClient->new->config_value(dirs => 'xsl') . $xslt;
+ print data_to_xml($args);
+ return Apache2::Const::OK;
+}
+
my $_output_handler_dispatch = {
+ "text/html" => {
+ "prio" => 0,
+ "code" => sub {
+ $_[0]->content_type("text/html; charset=utf-8");
+ return html_ish_output( @_, 'FlatFielder2HTML.xsl' );
+ }
+ },
"application/xml" => {
"prio" => 0,
"code" => sub {
# END package globals
+=comment
+
+<FlatSearch hint='foo' identifier='bar' label='Foo Bar' FS_key='ad1awe43a3a2a3ra32a23ra32ra23rar23a23r'>
+ <row ordinal='1'>
+ <column name='fiz'>YAY!</column>
+ <column name='faz'>boooo</column>
+ </row>
+ <row ordinal='2'>
+ <column name='fiz'>WHEEE!</column>
+ <column name='faz'>noooo</column>
+ </row>
+</FlatSearch>
+
+=cut
+
sub data_to_xml {
my ($args) = @_;
$fs->setAttribute("FS_key", $args->{key}) if $args->{key};
$dom->setDocumentElement($fs);
+ my $rownum = 1;
for my $i (@{$$args{data}}) {
- my $item = $dom->createElement("item");
+ my $item = $dom->createElement("row");
+ $item->setAttribute('ordinal', $rownum);
+ $rownum++;
for my $k (keys %$i) {
- my $val = $dom->createElement($k);
+ my $val = $dom->createElement('column');
+ $val->setAttribute('name', $k);
$val->appendText($i->{$k});
$item->addChild($val);
}
# XML::LibXML::Document::toString() returns an encoded byte string, which
# is why we don't need to binmode STDOUT, ':utf8'.
+
+ return $_xslt->parse_stylesheet(
+ $_parser->parse_file( $$args{stylesheet} )
+ )->transform(
+ $dom
+ )->toString if ($$args{stylesheet}); # configured transform, early return
+
return $dom->toString();
}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ version="1.0">
+ <xsl:output method="html" doctype-public="-//W3C/DTD HTML 4.01 Transitional//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" />
+
+ <xsl:template match="//FlatSearch">
+ <html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html" charset="utf-8"/>
+ </head>
+ <body>
+ <table>
+ <tbody>
+ <xsl:apply-templates select="row[@ordinal='1']"/>
+ <xsl:apply-templates select="row[not(@ordinal='1')]"/>
+ </tbody>
+ </table>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="row[@ordinal='1']">
+ <tr>
+ <xsl:for-each select="column"><th><xsl:value-of select="@name"/></th></xsl:for-each>
+ <tr>
+ </tr>
+ <xsl:for-each select="column"><td><xsl:value-of select="."/></td></xsl:for-each>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="row">
+ <tr>
+ <xsl:for-each select="column"><td><xsl:value-of select="."/></td></xsl:for-each>
+ </tr>
+ </xsl:template>
+
+</xsl:stylesheet>