Example 2: Using Xalan 1.2 to transform XML with XSLT
As another example of accessing Java objects in PHP, we will use the Xalan-java
XSLT engine from the Apache XML project. With this application, we can transform
XML source files using instructions in a XSL file. This allows for a great
number of interesting scenarios in the field of document processing and content
management.
XSLT engine from the Apache XML project. With this application, we can transform
XML source files using instructions in a XSL file. This allows for a great
number of interesting scenarios in the field of document processing and content
management.
To get started, we need to place both xerces.jar and xalan.jar files (included
in Xalan-Java version 1.2 from xml.apache.org) in your java.class.path, as defined
in your php.ini file.
in Xalan-Java version 1.2 from xml.apache.org) in your java.class.path, as defined
in your php.ini file.
The function xslt_transform() takes XML and XSL files as parameters and returns
the transformed output in a string.
XML and XSL parameters can be filenames (eg. foo.xml) or fully resolved URI’s
(eg. http://localhost/foo.xml).
the transformed output in a string.
XML and XSL parameters can be filenames (eg. foo.xml) or fully resolved URI’s
(eg. http://localhost/foo.xml).
<?php
function xslt_transform($xml,$xsl) {
// Create a XSLTProcessorFactory object. XSLTProcessorfactory is a Java
// class which manufactures the processor for performing transformations.
$XSLTProcessorFactory = new java("org.apache.xalan.xslt.XSLTProcessorFactory");
// Use the XSLTProcessorFactory method getProcessor() to create a
// new XSLTProcessor object.
$XSLTProcessor = $XSLTProcessorFactory->getProcessor();
// Use XSLTInputSource objects to provide input to the XSLTProcessor
// process() method for transformation. Create objects for both the
// xml source as well as the XSL input source. Parameter of
// XSLTInputSource is (in this case) a 'system identifier' (URI) which
// can be an URL or filename. If the system identifier is an URL, it
// must be fully resolved.
$xmlID = new java("org.apache.xalan.xslt.XSLTInputSource", $xml);
$stylesheetID = new java("org.apache.xalan.xslt.XSLTInputSource", $xsl);
// Create a stringWriter object for the output.
$stringWriter = new java("java.io.StringWriter");
// Create a ResultTarget object for the output with the XSLTResultTarget
// class. Parameter of XSLTResultTarget is (in this case) a 'character
// stream', which is the stringWriter object.
$resultTarget = new java("org.apache.xalan.xslt.XSLTResultTarget", $stringWriter);
// Process input with the XSLTProcessors' method process(). This
// method uses the XSL stylesheet to transform the XML input, placing
// the result in the result target.
$XSLTProcessor->process($xmlID,$stylesheetID,$resultTarget);
// Use the stringWriters' method toString() to
// return the buffer's current value as a string to get the
// transformed result.
$result = $stringWriter->toString();
$stringWriter->close();
return($result);
}
?>
Then, you can call this function as shown in the example below.
$xml contains a string with the fully resolved URL of XML file.
$xsl contains string with a XSL stylesheet URL containing rules for
conversion to generic HTML.
$out will contain a string with output, as a result of calling xslt_transform
described above.
This example parses a XML newsfeed containing the 5 latest articles on
phpbuilder.com. You are encouraged to also try other XML feeds and/or XSl
stylesheets.
$xml contains a string with the fully resolved URL of XML file.
$xsl contains string with a XSL stylesheet URL containing rules for
conversion to generic HTML.
$out will contain a string with output, as a result of calling xslt_transform
described above.
This example parses a XML newsfeed containing the 5 latest articles on
phpbuilder.com. You are encouraged to also try other XML feeds and/or XSl
stylesheets.
<?php
$xml
= "https://phpbuilder.com/rss_feed.php?type=articles&limit=5";
$xsl = "http://www.soeterbroek.com/code/xml/rss_html.xsl";
$out = xslt_transform($xml,$xsl);
echo $out;
?>
If you are processing local files, make sure you use the full path name to pass to the Java class.
<?php
$xml
= "/web/htdocs/xml_java/rss_feed.xml";
$xsl = "/web/htdocs/xml_java/rss_html.xsl";
$out = xslt_transform($xml,$xsl);
echo $out;
?>
Although there are a number of other ways in PHP to achieve the same results,
the above example gives you a good idea of
the possibilities of accessing Java objects in PHP.
the above example gives you a good idea of
the possibilities of accessing Java objects in PHP.