Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Jakarta-velocity Wiki" 
for change notification.

The following page has been changed by VladimirKirichenko:
http://wiki.apache.org/jakarta-velocity/XPath

New page:
 Directive that evaluates xpath against org.w3c.dom.Node by Vladimir Kirichenko 
<vladimir.kirichenko#gmail.com>
{{{
package org.apache.velocity.runtime.directive;

import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.directive.Directive;
import org.apache.velocity.runtime.parser.node.Node;
import org.apache.xpath.XPathAPI;

import javax.xml.transform.TransformerException;
import java.io.IOException;
import java.io.Writer;

public class XPath extends Directive {
    public String getName() {
        return "xpath";
    }

    public int getType() {
        return LINE;
    }

    public boolean render( InternalContextAdapter context, Writer writer, Node 
node ) throws IOException, ResourceNotFoundException, ParseErrorException, 
MethodInvocationException {
        String var = node.jjtGetChild( 0 ).getFirstToken().image.substring( 1 );
        org.w3c.dom.Node document = ( org.w3c.dom.Node ) node.jjtGetChild( 1 
).value( context );
        String xpath = String.valueOf( node.jjtGetChild( 2 ).value( context ) );

        try {
            context.put( var, XPathAPI.eval( document, xpath ) );
        } catch( TransformerException e ) {
            throw new IOException( "cannot evaluate xpath: " + e.getMessage() );
        }
        return true;
    }
}
}}}

Example: {{{ #xpath($result $doc '/my/x/path') }}}

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

Reply via email to