On 8/6/06, James M Snell <[EMAIL PROTECTED]> wrote:
Danny,

There are two things you could do here.

1. Drop down to the Axiom APIs to add the PI (so the browser can apply
the transform)

    Factory factory = Factory.INSTANCE;
    Document<Feed> doc = factory.newDocument();

    // drop down to the Axiom interfaces
    OMFactory omfactory = (OMFactory) factory;
    omfactory.createOMProcessingInstruction(
      (OMContainer)doc,
      "xml-stylesheet",
      "href=\"foo.xslt\"");

    // then create the root element
    factory.newFeed(doc);

    doc.writeTo(System.out);

    yields:

    <?xml version='1.0' encoding='UTF-8'?>
    <?xml-stylesheet href="foo.xslt"?>
    <a:feed xmlns:a="http://www.w3.org/2005/Atom"/>

2. Apply the XSLT transform on the server.  You can apply XSLT
transforms directly to the Abdera objects.

    TransformerFactory factory = TransformerFactory.newInstance();

    // Prepare the XSLT
    Document xslt = Parser.INSTANCE.parse(
      XsltExample.class.getResourceAsStream("/test.xslt"));
    AbderaSource xsltSource = new AbderaSource(xslt);
    Transformer transformer = factory.newTransformer(xsltSource);

    // Now let's get the feed we're going to transform
    Document<Feed> feed = Parser.INSTANCE.parse(
      XsltExample.class.getResourceAsStream("/simple.xml"));
    AbderaSource feedSource = new AbderaSource(feed);

    // Transform and output
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    Result result = new StreamResult(out);
    transformer.transform(feedSource, result);
    System.out.println(out);

Should we consider adding some non-axiom-specific way to do this sort
of thing?  Stylesheets are becoming more and more common in feeds, and
it would be nice to be able to portably add one to a feed generated by
Abdera.  Doing so via XSLT seems like an interesting work around, but
perhaps we should consider adding support for this to the core of the
system.

-garrett

Reply via email to