Hi all,

I'm writing a SimpleTaglib and would really appreciate some comments. I
have included example code below to illustrate what I'm doing. I wish to
have a tag, <GC:makemaintag/>, expanded into an xml fragment by my
taglib.

First of all, this is my first taglib (:-), have I got the right idea?
Could I do it a better way? 

Second, I've found that the resulting xml fragment has the xml namespace
written in every tag, which is rather unnecessary. Is there a way to get
the namespace declared in the parent tag and not in all of it's
children?

I can live with all the namespaces but seeing as I'm a bit of a perl
newbie and a taglib newbie it would be great if you can pass your eyes
over my code below.

Cheers

Adam


The xml fragment I wish to build is:

  <maintag>
    <item>
      <title></title>
      <id></id>
      <value></value>
    </item><!-- repeated -->  
    <moreinfo></moreinfo>
  </maintag>

I am using a sub:

  sub makemaintag: struct{
    #see below for code
  }

And this results in this xml being output:

  <GC:maintag xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>
    <GC:moreinfo xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>these items
were created by an xsp</GC:moreinfo>
      <GC:item xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>
         <GC:title xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>first
item</GC:title>
  <!-- see bellow for complete list -->



##############################################
Source code, in more detail
##############################################
______________________________________________
My Test XSP file
______________________________________________

<?xml version="1.0"?>
<?xml-stylesheet href="." type="application/x-xsp"?>
<?xml-stylesheet href="test.xsl" type="text/xsl"?>

<xsp:page
xmlns:xsp="http://www.apache.org/1999/XSP/Core";
xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";
language="Perl">
        <body>
           <GC:makemaintag/>
        </body>
</xsp:page>

______________________________________________
My Test Taglib
______________________________________________

### new
# AxKit XSP taglib 
# Adam Griffiths 
# 20/11/2002 - v.0.01
###

package AxKit::XSP::GC;
use Apache::AxKit::Language::XSP::SimpleTaglib;
use vars qw/@ISA $NS $VERSION/;

@ISA = ('Apache::AxKit::Language::XSP::SimpleTaglib');

# define the namespace we use 
$NS = 'http://xmlns.domain.co.uk/xsp/GC';

$VERSION = '0.01';


    package AxKit::XSP::GC::Handlers;
    use strict;

sub makemaintag: struct{
        return << 'EOF';
my $dynamicvalue='on the fly'; #could be the result of some routine or
another
my $item1 = {
  title=>"first item",
  id=>'232',
  value=>'static value'
};
my $item2 = {
  title=>"second item",
  id=>'232',
  value=>$dynamicvalue
};
my @itemlist;
push @itemlist, $item1;
push @itemlist, $item2;
#could push more items onto @itemlist here

my $children = {
  item=> \@itemlist, # \@ gives arrayref
  moreinfo=>'these items were created by an xsp'
};
my $maintag = {
  maintag=>$children
};

#gives:
#<maintag>
#<item>
#       <title></title>
#       <id></id>
#   <value></value>
#</item>
#<moreinfo></moreinfo>
#</maintag>

$maintag;    
EOF
}
1;
______________________________________________
Resulting XML (you may wish to turn line wraping off!)
______________________________________________

<GC:maintag xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>
        <GC:moreinfo xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>these
items were created by an xsp</GC:moreinfo>
        <GC:item xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>
                <GC:title
xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>first item</GC:title>
                <GC:id
xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>232</GC:id>
                <GC:value
xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>static value</GC:value>
        </GC:item>
        <GC:item xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>
                <GC:title
xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>second item</GC:title>
                <GC:id
xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>232</GC:id>
                <GC:value xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>on
the fly</GC:value>
        </GC:item>
</GC:maintag>

______________________________________________
My prefered resulting XML, can it be done?
______________________________________________

<GC:maintag xmlns:GC="http://xmlns.domain.co.uk/xsp/GC";>
        <GC:moreinfo>these items were created by an xsp</GC:moreinfo>
        <GC:item >
                <GC:title >first item</GC:title>
                <GC:id>232</GC:id>
                <GC:value >static value</GC:value>
        </GC:item>
        <GC:item>
                <GC:title>second item</GC:title>
                <GC:id>232</GC:id>
                <GC:value>on the fly</GC:value>
        </GC:item>
</GC:maintag>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to