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

Re: how to handle structured data from Java

Subject: Re: how to handle structured data from Java
From: Robert Koberg <rob@xxxxxxxxxx>
Date: Mon, 10 Jan 2005 19:16:11 -0800
implements uriresolver
Kevin Rodgers wrote:
Robert Koberg writes:

Kevin Rodgers wrote:

I need to pass an attribute value to a Java method implemented by a
co-worker and save the resulting object in a variable (since it's a
relatively expensive operation), then access the object's string
components.  Should I write an extension function in Java to call his
method and convert the object into a DOM Node that would be stored via
<xsl:value-of name="variable" select="extension:function(@attribute)">?
How would I then access its subnodes -- via select="$variable/component-x"?

You really don't want to use extensions.



Or is there a better way?

I think so. Have your co-worker create a class that implements javax.xml.transform.URIResolver. It should check for the value coming in as an href. When the resolver sees your attribute value, have him return an appropriate XML Source. Then you can do the following in your XSL:


<xsl:variable name="myvar" select="document(@myattr)"/>


OK, but where do I reference HisClass?

URIResolver only declares the resolve method, which returns a Source.
But the Source interface only declares 2 methods, getSystemId and
setSystemId, neither of which is defined to return a dynamic value like
an XML string.

And since the document function takes a URI, shouldn't the select
expression be something like
	"document(concat('http://server/HisServlet?foo=', @myattr))"
If so, then why does he need to implement URIResolver as HisClass --
couldn't he just implement HisServlet?


There are several ways to handle the situation. It might be appropriate to use an XMLFilter chain and never use the document function. This removes the concern of gathering source XML in the transformation. As for a URIResolver, it allows the user to gather source XML as defined by the URIResolver.

For example, in the resolve method, you could:

<xsl:apply-templates select="document('foo')"/>
....
Source source = null;

File file = project.resolveFile(href);

if (file.exists()) {
  source = new StreamSource(new FileInputStream(file));
} else if (href.equals("someObject")) {
  source = project.getObjectAsSaxSource(href);
} else {
  source = new StreamSource(new StringReader("<file-not-found/>"));
}

return source;

best,
-Rob



Thanks,

Current Thread

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
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.