You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ws.apache.org by Apache Wiki <wi...@apache.org> on 2008/04/14 17:28:14 UTC

[Ws Wiki] Update of "axiom-xpath-api-gsoc-varuna" by VarunaJayasiri

Dear Wiki user,

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

The following page has been changed by VarunaJayasiri:
http://wiki.apache.org/ws/axiom-xpath-api-gsoc-varuna

------------------------------------------------------------------------------
- == Axiom XPath API ==
+ = Axiom XPath API =
  
- This is not intended to be a comprehensive API documentation, but an overview of proposed API for Google Summer of Code project.
+ ==== Compile XPath Expression ====
+ {{{
+ axiom_xpath_expression_t* axiom_xpath_compile_expression(const axutil_env_t *env, const axis2_char_t* xpath_expr)
+ }}}
+ Creates a axiom_xpath_expression by parsing xpath_expr. All parse errors will be handled by this function. All parse errors will be logged if necessary.
  
+ ''Example:''
- == Functions ==
- 
- ==== axiom_xpath_expression_t* axiom_xpath_create_expression(const axutil_env_t *env, const axis2_char_t* xpath_expr) ====
- Creates a axiom_xpath_expression by parsing xpath_expr. All parse errors will be handled by this function. All parse errors will be logged if necessary.
- ===== Example: =====
  {{{
- axiom_xpath_expression_t *exp = axiom_xpath_create_expression(env, "/father/son");
+ axiom_xpath_expression_t *exp = axiom_xpath_compile_expression(env, "/father/son");
  }}}
  
+ ==== Create XPath Context ====
- ==== axiom_xpath_namespace_list* axiom_xpath_create_namespace_list(const axutil_env_t *env) ====
- Creates an empty axiom_xpath_namespace_list. This will be used to register namespaces.
- ===== Example: =====
  {{{
- axiom_xpath_namespace_list *namespaces = axiom_xpath_create_namespace_list(env);
+ axiom_xpath_context_t* axiom_xpath_context_create(const axutil_env_t *env, const axiom_node_t * root_node)
+ }}}
+ Creates a XPath context for the root node.
+ 
+ ==== Register Namespaces ====
+ {{{
+ void axiom_xpath_register_namespaces(axiom_xpath_context_t *context, const axis2_char_t* prefix, const axis2_char_t* uri)
+ }}}
+ Adds namespace to list of namespaces.
+ 
+ ''Example:''
+ {{{
+ axiom_xpath_register_namespace(context, "red", "http://www.xvpj.net/red");
  }}}
  
+ ==== Evaluate XPath Query ====
- ==== void axiom_xpath_register_namespace(const axutil_env_t *env, axiom_xpath_namespace_list * namespaces, const axis2_char_t* prefix, const axis2_char_t* uri) ====
- Adds an namespace to list of namespaces.
- ===== Example:: =====
  {{{
- axiom_xpath_register_namespace(env, namespaces, "red", "http://www.xvpj.net/red");
+ axiom_xpath_result_t* axiom_xpath_evaluate(axiom_xpath_context_t *context, const axiom_xpath_expression_t * xpath_expr)
  }}}
+ Evaluates the xpath expression and return the results.
  
+ ''Example:''
- ==== axiom_xpath_result_t* axiom_xpath_evaluate(const axutil_env_t *env, const axiom_node_t * root_node, const axiom_xpath_expression_t * xpath_expr, const axiom_xpath_namespace_list * namespaces = NULL) ====
- Evaluates the xpath expression and return the results.
- ===== Example:: =====
  {{{
  axiom_xpath_result_t* result = axiom_xpath_select_nodes(env, root, exp);
  }}}
- ----
- ''It is also possible to use a xpath context (as in libxml xpath module) where the context is initialized with the root node and then namespaces are registered''
  
- ==== axiom_xpath_result_type_t axiom_xpath_get_result_type(axiom_xpath_result_t * result) ====
- Gets the type of result obtained by evaluating the xpath expression. This could be a string, number, boolean, node or a list of nodes.
+ ==== XPath Result ====
+ {{{
+ struct axiom_xpath_result
+ {
+  int size; // Number of nodes in the result set
+  int flag; // For error messages, etc
+  axiom_xpath_result_node_t * nodes;
+ }
+ }}}
  
- ==== axiom_node_t* axiom_xpath_get_node(axiom_xpath_result_t * result) ====
- Returns the axiom node in the result. If the type of result is not node, NULL will be returned.
+ {{{
+ struct axiom_xpath_result_node
+ {
+  axiom_xpath_result_type type;
+  void * value;
+ }
+ }}}
  
- ===== Other functions to process results =====
- Other functions to process the results will have a similar interface
+ ==== Casting ====
+ {{{
+ axis2_char_t * axiom_xpath_cast_node2string(axiom_xpath_result_node_t * node)
+ }}}
+ The cast depends on the type of the node This could be a string, number, boolean, or a node.
+ If it is a string, it would be simply returned.
+ If it is a number or a boolean it will be converted to a string.
+ If it is a axiom node, the node and it's content will be returned as a string.
  
+ {{{
+ int axiom_xpath_cast_node2boolean(axiom_xpath_result_node_t * node)
+ }}}
+ If the result is boolean it will be returned.
+ Otherwise true will be returned if the result is not empty.
+ 
+ {{{
+ double axiom_xpath_cast_node2number(axiom_xpath_result_node_t * node)
+ }}}
+ If the result is a numebr it will be returned.
+ If the result is boolean, 1 will be returned if true, 0 otherwise.
+ 0 will be returned if the result type is string or axiom node.
+ 
+ {{{
+ axiom_node_t * axiom_xpath_cast_node2axiom_node(axiom_xpath_result_node_t * node)
+ }}}
+ If the result type is node it will be casted and returned; otherwise, NULL will be returned.
+ 
+ ==== Freeing Memory ====
+ 
+ {{{
+ void axiom_xpath_free_context(axiom_xpath_context_t *context)
+ }}}
+ Frees the xpath context
+ 
+ {{{
+ void axiom_xpath_free_expression(axiom_xpath_expression_t * xpath_expr)
+ }}}
+ Frees the xpath expression
+ 
+ {{{
+ void axiom_xpath_free_result(axiom_xpath_result_t* result)
+ }}}
+ Frees the xpath result set. If result set contains axiom nodes they will not be freed as they are just pointers to the nodes in the XML tree.
+ 

---------------------------------------------------------------------
To unsubscribe, e-mail: general-unsubscribe@ws.apache.org
For additional commands, e-mail: general-help@ws.apache.org