| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include <axiom_node.h> |
| #include <axiom_element.h> |
| #include <axiom_document.h> |
| #include <axutil_array_list.h> |
| #include <axutil_uri.h> |
| #include <axiom_util.h> |
| |
| |
| AXIS2_EXTERN axis2_char_t *AXIS2_CALL |
| axiom_util_get_child_text( |
| axiom_node_t *node, |
| const axutil_env_t * env) |
| { |
| axiom_element_t *ele = NULL; |
| axis2_char_t *txt = NULL; |
| |
| ele = (axiom_element_t*)axiom_node_get_data_element(node, env); |
| txt = axiom_element_get_text(ele, env, node); |
| |
| return txt; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_first_child_element_with_uri( |
| axiom_node_t * ele_node, |
| const axutil_env_t * env, |
| axis2_char_t * uri, |
| axiom_node_t ** child) |
| { |
| axiom_node_t *child_node = NULL; |
| |
| if(!ele_node || !uri) |
| { |
| AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); |
| AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Element node or uri is NULL"); |
| return NULL; |
| } |
| |
| child_node = axiom_node_get_first_child(ele_node, env); |
| while(child_node) |
| { |
| if(axiom_node_get_node_type(child_node, env) == AXIOM_ELEMENT) |
| { |
| axiom_element_t *child_ele = NULL; |
| axiom_namespace_t *ns = NULL; |
| |
| child_ele = (axiom_element_t *)axiom_node_get_data_element(child_node, env); |
| ns = axiom_element_get_namespace(child_ele, env, child_node); |
| if(ns) |
| { |
| axis2_char_t *child_uri = NULL; |
| child_uri = axiom_namespace_get_uri(ns, env); |
| if(child_uri && axutil_strcmp(child_uri, uri) == 0) |
| { |
| (*child) = child_node; |
| return child_ele; |
| } |
| } |
| } |
| child_node = axiom_node_get_next_sibling(child_node, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_next_sibling_element_with_uri( |
| axiom_node_t * ele_node, |
| const axutil_env_t * env, |
| axis2_char_t * uri, |
| axiom_node_t ** next_node) |
| { |
| axiom_node_t *next_sib_node = NULL; |
| if(!ele_node || !uri) |
| { |
| AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_NULL_PARAM, AXIS2_FAILURE); |
| AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Element node or uri is NULL"); |
| return NULL; |
| } |
| |
| next_sib_node = axiom_node_get_next_sibling(ele_node, env); |
| while(next_sib_node) |
| { |
| if(axiom_node_get_node_type(next_sib_node, env) == AXIOM_ELEMENT) |
| { |
| axiom_element_t *sib_ele = NULL; |
| axiom_namespace_t *ns = NULL; |
| |
| sib_ele = (axiom_element_t *)axiom_node_get_data_element(next_sib_node, env); |
| ns = axiom_element_get_namespace(sib_ele, env, next_sib_node); |
| if(ns) |
| { |
| axis2_char_t *sib_uri = NULL; |
| sib_uri = axiom_namespace_get_uri(ns, env); |
| if(sib_uri && axutil_strcmp(sib_uri, uri) == 0) |
| { |
| (*next_node) = next_sib_node; |
| return sib_ele; |
| } |
| } |
| } |
| next_sib_node = axiom_node_get_next_sibling(next_sib_node, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_first_child_element( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axiom_node_t ** child_node) |
| { |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, child_node, NULL); |
| |
| return axiom_element_get_first_element(ele, env, ele_node, child_node); |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_last_child_element( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axiom_node_t ** child_node) |
| { |
| axiom_node_t *last_node = NULL; |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, child_node, NULL); |
| |
| last_node = axiom_node_get_last_child(ele_node, env); |
| while(last_node) |
| { |
| if(axiom_node_get_node_type(last_node, env) == AXIOM_ELEMENT) |
| { |
| *child_node = last_node; |
| return (axiom_element_t *)axiom_node_get_data_element(last_node, env); |
| |
| } |
| last_node = axiom_node_get_previous_sibling(ele_node, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_next_sibling_element( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axiom_node_t ** next_node) |
| { |
| axiom_node_t *next_sibling = NULL; |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| |
| next_sibling = axiom_node_get_next_sibling(ele_node, env); |
| while(next_sibling) |
| { |
| if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) |
| { |
| *next_node = next_sibling; |
| return (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); |
| } |
| next_sibling = axiom_node_get_next_sibling(next_sibling, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_first_child_element_with_localname( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axis2_char_t * localname, |
| axiom_node_t ** child_node) |
| { |
| axiom_node_t *child = NULL; |
| axiom_node_t *next_sibling = NULL; |
| axis2_char_t *child_localname = NULL; |
| axiom_element_t *om_ele = NULL; |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, child_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, localname, NULL); |
| |
| child = axiom_node_get_first_child(ele_node, env); |
| if(child) |
| { |
| if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(child, env); |
| if(om_ele) |
| { |
| child_localname = axiom_element_get_localname(om_ele, env); |
| if(child_localname && axutil_strcmp(child_localname, localname) == 0) |
| { |
| *child_node = child; |
| return om_ele; |
| } |
| } |
| } |
| om_ele = NULL; |
| child_localname = NULL; |
| } |
| |
| next_sibling = axiom_node_get_next_sibling(child, env); |
| while(next_sibling) |
| { |
| if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); |
| if(om_ele) |
| { |
| child_localname = axiom_element_get_localname(om_ele, env); |
| if(child_localname && axutil_strcmp(child_localname, localname) == 0) |
| { |
| *child_node = next_sibling; |
| return om_ele; |
| } |
| |
| } |
| om_ele = NULL; |
| child_localname = NULL; |
| } |
| next_sibling = axiom_node_get_next_sibling(next_sibling, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_last_child_element_with_localname( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axis2_char_t * localname, |
| axiom_node_t ** child_node) |
| { |
| axiom_node_t *child = NULL; |
| axiom_element_t *om_ele = NULL; |
| axis2_char_t *child_localname = NULL; |
| |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, localname, NULL); |
| AXIS2_PARAM_CHECK(env->error, child_node, NULL); |
| |
| child = axiom_node_get_last_child(ele_node, env); |
| while(child) |
| { |
| if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(ele_node, env); |
| if(om_ele) |
| { |
| child_localname = axiom_element_get_localname(om_ele, env); |
| if(child_localname && axutil_strcmp(child_localname, localname) == 0) |
| { |
| *child_node = child; |
| return om_ele; |
| } |
| |
| } |
| om_ele = NULL; |
| child_localname = NULL; |
| } |
| child = axiom_node_get_previous_sibling(child, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_next_siblng_element_with_localname( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axis2_char_t * localname, |
| axiom_node_t ** next_node) |
| { |
| axiom_node_t *next_sibling = NULL; |
| axiom_element_t *om_ele = NULL; |
| axis2_char_t *ele_localname = NULL; |
| |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| |
| next_sibling = axiom_node_get_next_sibling(ele_node, env); |
| while(next_sibling) |
| { |
| if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); |
| if(om_ele) |
| { |
| ele_localname = axiom_element_get_localname(om_ele, env); |
| if(ele_localname && axutil_strcmp(localname, ele_localname) == 0) |
| { |
| *next_node = next_sibling; |
| return om_ele; |
| } |
| } |
| om_ele = NULL; |
| ele_localname = NULL; |
| } |
| next_sibling = axiom_node_get_next_sibling(next_sibling, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_first_child_element_with_uri_localname( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axis2_char_t * localname, |
| axis2_char_t * uri, |
| axiom_node_t ** child_node) |
| { |
| axiom_node_t *child = NULL; |
| axiom_node_t *next_sibling = NULL; |
| axis2_char_t *child_localname = NULL; |
| axiom_element_t *om_ele = NULL; |
| axiom_namespace_t *ns = NULL; |
| axis2_char_t *ns_uri = NULL; |
| |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, child_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, localname, NULL); |
| AXIS2_PARAM_CHECK(env->error, uri, NULL); |
| |
| child = axiom_node_get_first_child(ele_node, env); |
| if(!child) |
| { |
| return NULL; |
| |
| } |
| if(axiom_node_get_node_type(ele_node, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(child, env); |
| if(om_ele) |
| { |
| child_localname = axiom_element_get_localname(om_ele, env); |
| ns = axiom_element_get_namespace(om_ele, env, child); |
| if(ns) |
| { |
| ns_uri = axiom_namespace_get_uri(ns, env); |
| } |
| |
| if((child_localname) && (axutil_strcmp(child_localname, localname) == 0) && (ns_uri) |
| && (axutil_strcmp(ns_uri, uri) == 0)) |
| { |
| *child_node = child; |
| return om_ele; |
| } |
| } |
| } |
| om_ele = NULL; |
| child_localname = NULL; |
| ns = NULL; |
| ns_uri = NULL; |
| |
| next_sibling = axiom_node_get_next_sibling(child, env); |
| while(next_sibling) |
| { |
| if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); |
| if(om_ele) |
| { |
| child_localname = axiom_element_get_localname(om_ele, env); |
| ns = axiom_element_get_namespace(om_ele, env, next_sibling); |
| if(ns) |
| { |
| ns_uri = axiom_namespace_get_uri(ns, env); |
| } |
| |
| if((child_localname) && (axutil_strcmp(child_localname, localname) == 0) |
| && (ns_uri) && (axutil_strcmp(ns_uri, uri) == 0)) |
| { |
| *child_node = next_sibling; |
| return om_ele; |
| } |
| |
| } |
| om_ele = NULL; |
| child_localname = NULL; |
| ns = NULL; |
| ns_uri = NULL; |
| } |
| next_sibling = axiom_node_get_next_sibling(next_sibling, env); |
| } |
| return NULL; |
| } |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_last_child_element_with_uri_localname( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axis2_char_t * localname, |
| axis2_char_t * uri, |
| axiom_node_t ** child_node) |
| { |
| axiom_node_t *child = NULL; |
| axiom_element_t *om_ele = NULL; |
| axis2_char_t *child_localname = NULL; |
| axiom_namespace_t *ns = NULL; |
| axis2_char_t *ns_uri = NULL; |
| |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, localname, NULL); |
| AXIS2_PARAM_CHECK(env->error, child_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, uri, NULL); |
| |
| child = axiom_node_get_last_child(ele_node, env); |
| while(child) |
| { |
| if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(ele_node, env); |
| if(om_ele) |
| { |
| ns = axiom_element_get_namespace(om_ele, env, ele_node); |
| if(ns) |
| { |
| ns_uri = axiom_namespace_get_uri(ns, env); |
| } |
| child_localname = axiom_element_get_localname(om_ele, env); |
| if(child_localname && (axutil_strcmp(child_localname, localname) == 0) && (ns_uri) |
| && (axutil_strcmp(ns_uri, uri) == 0)) |
| { |
| *child_node = child; |
| return om_ele; |
| } |
| } |
| om_ele = NULL; |
| child_localname = NULL; |
| ns = NULL; |
| ns_uri = NULL; |
| } |
| child = axiom_node_get_previous_sibling(child, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_next_sibling_element_with_uri_localname( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axis2_char_t * localname, |
| axis2_char_t * uri, |
| axiom_node_t ** next_node) |
| { |
| axiom_node_t *next_sibling = NULL; |
| axiom_element_t *om_ele = NULL; |
| axis2_char_t *ele_localname = NULL; |
| axiom_namespace_t *ns = NULL; |
| axis2_char_t *ns_uri = NULL; |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| |
| next_sibling = axiom_node_get_next_sibling(ele_node, env); |
| while(next_sibling) |
| { |
| if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); |
| if(om_ele) |
| { |
| ns = axiom_element_get_namespace(om_ele, env, next_sibling); |
| if(ns) |
| { |
| ns_uri = axiom_namespace_get_uri(ns, env); |
| } |
| ele_localname = axiom_element_get_localname(om_ele, env); |
| if(ele_localname && (axutil_strcmp(localname, ele_localname) == 0) && (ns) |
| && (axutil_strcmp(ns_uri, uri) == 0)) |
| { |
| *next_node = next_sibling; |
| return om_ele; |
| } |
| } |
| om_ele = NULL; |
| ele_localname = NULL; |
| ns_uri = NULL; |
| ns = NULL; |
| } |
| next_sibling = axiom_node_get_next_sibling(next_sibling, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_first_child_element_with_localnames( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axutil_array_list_t * names, |
| axiom_node_t ** child_node) |
| { |
| axiom_node_t *child = NULL; |
| axiom_node_t *next_sibling = NULL; |
| axis2_char_t *child_localname = NULL; |
| axis2_char_t *given_localname = NULL; |
| axiom_element_t *om_ele = NULL; |
| int size = 0; |
| int i = 0; |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, child_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, names, NULL); |
| |
| child = axiom_node_get_first_child(ele_node, env); |
| if(child) |
| { |
| if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(child, env); |
| if(om_ele) |
| { |
| size = axutil_array_list_size(names, env); |
| child_localname = axiom_element_get_localname(om_ele, env); |
| |
| for(i = 0; i < size; i++) |
| { |
| given_localname = (axis2_char_t *)axutil_array_list_get(names, env, i); |
| |
| if((child_localname) && (NULL != given_localname) && axutil_strcmp( |
| child_localname, given_localname) == 0) |
| { |
| *child_node = child; |
| return om_ele; |
| } |
| given_localname = NULL; |
| } |
| } |
| } |
| om_ele = NULL; |
| child_localname = NULL; |
| given_localname = NULL; |
| size = 0; |
| } |
| |
| next_sibling = axiom_node_get_next_sibling(child, env); |
| while(next_sibling) |
| { |
| if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); |
| if(om_ele) |
| { |
| size = axutil_array_list_size(names, env); |
| child_localname = axiom_element_get_localname(om_ele, env); |
| for(i = 0; i < size; i++) |
| { |
| given_localname = (axis2_char_t *)axutil_array_list_get(names, env, i); |
| if((child_localname) && (NULL != given_localname) && (axutil_strcmp( |
| child_localname, given_localname) == 0)) |
| { |
| *child_node = next_sibling; |
| return om_ele; |
| } |
| given_localname = NULL; |
| } |
| } |
| om_ele = NULL; |
| child_localname = NULL; |
| given_localname = NULL; |
| } |
| next_sibling = axiom_node_get_next_sibling(next_sibling, env); |
| } |
| return NULL; |
| |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_last_child_element_with_localnames( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axutil_array_list_t * names, |
| axiom_node_t ** child_node) |
| { |
| axiom_node_t *child = NULL; |
| axiom_element_t *om_ele = NULL; |
| axis2_char_t *child_localname = NULL; |
| axis2_char_t *given_localname = NULL; |
| int size = 0; |
| int i = 0; |
| |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, names, NULL); |
| AXIS2_PARAM_CHECK(env->error, child_node, NULL); |
| |
| child = axiom_node_get_last_child(ele_node, env); |
| while(child) |
| { |
| if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(ele_node, env); |
| if(om_ele) |
| { |
| size = axutil_array_list_size(names, env); |
| for(i = 0; i < size; i++) |
| { |
| given_localname = (axis2_char_t *)axutil_array_list_get(names, env, i); |
| child_localname = axiom_element_get_localname(om_ele, env); |
| if(child_localname && (NULL != given_localname) && (axutil_strcmp( |
| child_localname, given_localname) == 0)) |
| { |
| *child_node = child; |
| return om_ele; |
| } |
| } |
| } |
| om_ele = NULL; |
| child_localname = NULL; |
| given_localname = NULL; |
| } |
| child = axiom_node_get_previous_sibling(child, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_next_siblng_element_with_localnames( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axutil_array_list_t * names, |
| axiom_node_t ** next_node) |
| { |
| axiom_node_t *next_sibling = NULL; |
| axiom_element_t *om_ele = NULL; |
| axis2_char_t *ele_localname = NULL; |
| axis2_char_t *given_localname = NULL; |
| int size = 0; |
| int i = 0; |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, names, NULL); |
| AXIS2_PARAM_CHECK(env->error, next_node, NULL); |
| |
| next_sibling = axiom_node_get_next_sibling(ele_node, env); |
| while(next_sibling) |
| { |
| if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); |
| if(om_ele) |
| { |
| size = axutil_array_list_size(names, env); |
| for(i = 0; i < size; i++) |
| { |
| given_localname = (axis2_char_t *)axutil_array_list_get(names, env, i); |
| ele_localname = axiom_element_get_localname(om_ele, env); |
| if((ele_localname) && (NULL != given_localname) && (axutil_strcmp( |
| given_localname, ele_localname) == 0)) |
| { |
| *next_node = next_sibling; |
| return om_ele; |
| } |
| |
| } |
| } |
| om_ele = NULL; |
| ele_localname = NULL; |
| } |
| next_sibling = axiom_node_get_next_sibling(next_sibling, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_first_child_element_with_localname_attr( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axis2_char_t * localname, |
| axis2_char_t * attr_name, |
| axis2_char_t * attr_value, |
| axiom_node_t ** child_node) |
| { |
| axiom_node_t *child = NULL; |
| axiom_node_t *next_sibling = NULL; |
| axis2_char_t *child_localname = NULL; |
| axiom_element_t *om_ele = NULL; |
| axiom_attribute_t *om_attr = NULL; |
| axutil_hash_t *attr_ht = NULL; |
| axutil_hash_index_t *hi = NULL; |
| axis2_char_t *om_attr_value = NULL; |
| axis2_char_t *om_attr_name = NULL; |
| |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, child_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, localname, NULL); |
| AXIS2_PARAM_CHECK(env->error, attr_name, NULL); |
| AXIS2_PARAM_CHECK(env->error, attr_value, NULL); |
| |
| child = axiom_node_get_first_child(ele_node, env); |
| |
| if(child) |
| { |
| if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(child, env); |
| if(om_ele) |
| { |
| |
| child_localname = axiom_element_get_localname(om_ele, env); |
| if(child_localname && axutil_strcmp(child_localname, localname) == 0) |
| { |
| attr_ht = axiom_element_get_all_attributes(om_ele, env); |
| if(attr_ht) |
| { |
| for(hi = axutil_hash_first(attr_ht, env); hi; hi |
| = axutil_hash_next(env, hi)) |
| { |
| void *val = NULL; |
| axutil_hash_this(hi, NULL, NULL, &val); |
| if(val) |
| { |
| om_attr = (axiom_attribute_t *)val; |
| om_attr_name = axiom_attribute_get_localname(om_attr, env); |
| |
| om_attr_value = axiom_attribute_get_value(om_attr, env); |
| if(om_attr_name && NULL != om_attr_value && axutil_strcmp( |
| om_attr_name, attr_name) == 0 && axutil_strcmp(om_attr_value, |
| attr_value) == 0) |
| { |
| AXIS2_FREE(env->allocator, hi); |
| *child_node = child; |
| return om_ele; |
| } |
| om_attr = NULL; |
| om_attr_name = NULL; |
| om_attr_value = NULL; |
| } |
| } |
| } |
| } |
| } |
| } |
| om_ele = NULL; |
| child_localname = NULL; |
| hi = NULL; |
| } |
| |
| next_sibling = axiom_node_get_next_sibling(child, env); |
| while(next_sibling) |
| { |
| if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); |
| if(om_ele) |
| { |
| child_localname = axiom_element_get_localname(om_ele, env); |
| if(child_localname && axutil_strcmp(child_localname, localname) == 0) |
| { |
| attr_ht = axiom_element_get_all_attributes(om_ele, env); |
| if(attr_ht) |
| { |
| |
| for(hi = axutil_hash_first(attr_ht, env); hi; hi |
| = axutil_hash_next(env, hi)) |
| { |
| void *val = NULL; |
| axutil_hash_this(hi, NULL, NULL, &val); |
| if(val) |
| { |
| om_attr = (axiom_attribute_t *)val; |
| om_attr_name = axiom_attribute_get_localname(om_attr, env); |
| |
| om_attr_value = axiom_attribute_get_value(om_attr, env); |
| |
| if(om_attr_name && NULL != om_attr_value && axutil_strcmp( |
| om_attr_name, attr_name) == 0 && axutil_strcmp(om_attr_value, |
| attr_value) == 0) |
| { |
| *child_node = next_sibling; |
| return om_ele; |
| } |
| om_attr = NULL; |
| om_attr_name = NULL; |
| om_attr_value = NULL; |
| } |
| } |
| } |
| } |
| |
| } |
| om_ele = NULL; |
| child_localname = NULL; |
| } |
| next_sibling = axiom_node_get_next_sibling(next_sibling, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_last_child_element_with_localname_attr( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axis2_char_t * localname, |
| axis2_char_t * attr_name, |
| axis2_char_t * attr_value, |
| axiom_node_t ** child_node) |
| { |
| axiom_node_t *child = NULL; |
| axiom_element_t *om_ele = NULL; |
| axis2_char_t *child_localname = NULL; |
| axiom_attribute_t *om_attr = NULL; |
| axis2_char_t *om_attr_name = NULL; |
| axis2_char_t *om_attr_value = NULL; |
| axutil_hash_index_t *hi = NULL; |
| axutil_hash_t *attr_ht = NULL; |
| |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, localname, NULL); |
| AXIS2_PARAM_CHECK(env->error, child_node, NULL); |
| |
| child = axiom_node_get_last_child(ele_node, env); |
| while(child) |
| { |
| if(axiom_node_get_node_type(child, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(ele_node, env); |
| if(om_ele) |
| { |
| child_localname = axiom_element_get_localname(om_ele, env); |
| if(child_localname && axutil_strcmp(child_localname, localname) == 0) |
| { |
| attr_ht = axiom_element_get_all_attributes(om_ele, env); |
| if(attr_ht) |
| { |
| for(hi = axutil_hash_first(attr_ht, env); hi; hi |
| = axutil_hash_next(env, hi)) |
| { |
| void *val = NULL; |
| axutil_hash_this(hi, NULL, NULL, &val); |
| if(val) |
| { |
| om_attr = (axiom_attribute_t *)val; |
| om_attr_name = axiom_attribute_get_localname(om_attr, env); |
| |
| om_attr_value = axiom_attribute_get_value(om_attr, env); |
| |
| if(om_attr_name && NULL != om_attr_value && axutil_strcmp( |
| om_attr_name, attr_name) == 0 && axutil_strcmp(om_attr_value, |
| attr_value) == 0) |
| { |
| AXIS2_FREE(env->allocator, hi); |
| *child_node = child; |
| return om_ele; |
| } |
| om_attr = NULL; |
| om_attr_name = NULL; |
| om_attr_value = NULL; |
| } |
| } |
| } |
| } |
| |
| } |
| om_ele = NULL; |
| child_localname = NULL; |
| } |
| child = axiom_node_get_previous_sibling(child, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_element_t *AXIS2_CALL |
| axiom_util_get_next_siblng_element_with_localname_attr( |
| axiom_element_t * ele, |
| const axutil_env_t * env, |
| axiom_node_t * ele_node, |
| axis2_char_t * localname, |
| axis2_char_t * attr_name, |
| axis2_char_t * attr_value, |
| axiom_node_t ** child_node) |
| { |
| axiom_node_t *next_sibling = NULL; |
| axiom_element_t *om_ele = NULL; |
| axis2_char_t *ele_localname = NULL; |
| axiom_attribute_t *om_attr = NULL; |
| axis2_char_t *om_attr_value = NULL; |
| axis2_char_t *om_attr_name = NULL; |
| axutil_hash_t *attr_ht = NULL; |
| axutil_hash_index_t *hi = NULL; |
| |
| AXIS2_PARAM_CHECK(env->error, ele_node, NULL); |
| |
| next_sibling = axiom_node_get_next_sibling(ele_node, env); |
| while(next_sibling) |
| { |
| if(axiom_node_get_node_type(next_sibling, env) == AXIOM_ELEMENT) |
| { |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(next_sibling, env); |
| if(om_ele) |
| { |
| ele_localname = axiom_element_get_localname(om_ele, env); |
| if(ele_localname && axutil_strcmp(localname, ele_localname) == 0) |
| { |
| attr_ht = axiom_element_get_all_attributes(om_ele, env); |
| if(attr_ht) |
| { |
| for(hi = axutil_hash_first(attr_ht, env); hi; hi |
| = axutil_hash_next(env, hi)) |
| { |
| void *val = NULL; |
| axutil_hash_this(hi, NULL, NULL, &val); |
| if(val) |
| { |
| om_attr = (axiom_attribute_t *)val; |
| om_attr_name = axiom_attribute_get_localname(om_attr, env); |
| |
| om_attr_value = axiom_attribute_get_value(om_attr, env); |
| |
| if(om_attr_name && NULL != om_attr_value && axutil_strcmp( |
| om_attr_name, attr_name) == 0 && axutil_strcmp(om_attr_value, |
| attr_value) == 0) |
| { |
| AXIS2_FREE(env->allocator, hi); |
| *child_node = next_sibling; |
| return om_ele; |
| } |
| om_attr = NULL; |
| om_attr_name = NULL; |
| om_attr_value = NULL; |
| } |
| } |
| } |
| } |
| } |
| om_ele = NULL; |
| ele_localname = NULL; |
| } |
| next_sibling = axiom_node_get_next_sibling(next_sibling, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axis2_char_t *AXIS2_CALL |
| axiom_util_get_child_node_text( |
| axiom_node_t * om_node, |
| const axutil_env_t * env) |
| { |
| axiom_element_t *om_ele = NULL; |
| if(!om_node) |
| { |
| return NULL; |
| } |
| if(axiom_node_get_node_type(om_node, env) != AXIOM_ELEMENT) |
| { |
| return NULL; |
| } |
| |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(om_node, env); |
| |
| if(om_ele) |
| { |
| return axiom_element_get_text(om_ele, env, om_node); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axis2_char_t *AXIS2_CALL |
| axiom_util_get_localname( |
| axiom_node_t * node, |
| const axutil_env_t * env) |
| { |
| axiom_element_t *om_ele = NULL; |
| |
| AXIS2_ENV_CHECK(env, NULL); |
| if(!node) |
| { |
| return NULL; |
| } |
| if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) |
| { |
| return NULL; |
| } |
| om_ele = (axiom_element_t *)axiom_node_get_data_element(node, env); |
| if(om_ele) |
| { |
| return axiom_element_get_localname(om_ele, env); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axis2_char_t *AXIS2_CALL |
| axiom_util_get_node_namespace_uri( |
| axiom_node_t * om_node, |
| const axutil_env_t * env) |
| { |
| axiom_element_t *om_ele = NULL; |
| axiom_namespace_t *om_ns = NULL; |
| if(!om_node) |
| { |
| return NULL; |
| } |
| if(axiom_node_get_node_type(om_node, env) == AXIOM_ELEMENT) |
| { |
| om_ele = axiom_node_get_data_element(om_node, env); |
| if(!om_ele) |
| { |
| return NULL; |
| } |
| om_ns = axiom_element_get_namespace(om_ele, env, om_node); |
| if(om_ns) |
| { |
| return axiom_namespace_get_uri(om_ns, env); |
| } |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_child_element_iterator_t *AXIS2_CALL |
| axiom_util_get_child_elements( |
| axiom_element_t * om_ele, |
| const axutil_env_t * env, |
| axiom_node_t * om_node) |
| { |
| axiom_element_t *first_ele = NULL; |
| axiom_node_t *first_node = NULL; |
| AXIS2_PARAM_CHECK(env->error, om_node, NULL); |
| AXIS2_PARAM_CHECK(env->error, om_ele, NULL); |
| first_ele = axiom_element_get_first_element(om_ele, env, om_node, &first_node); |
| if(first_ele) |
| { |
| return axiom_child_element_iterator_create(env, first_node); |
| } |
| return NULL; |
| } |
| |
| AXIS2_EXTERN axiom_document_t *AXIS2_CALL |
| axiom_util_new_document( |
| const axutil_env_t * env, |
| const axutil_uri_t * uri) |
| { |
| axis2_char_t *path = NULL; |
| axiom_xml_reader_t *reader = NULL; |
| axiom_stax_builder_t *om_builder = NULL; |
| axiom_document_t *doc = NULL; |
| |
| AXIS2_PARAM_CHECK(env->error, uri, NULL); |
| /* This is temporary code. Later complete the code to read from uri and build |
| * the document |
| */ |
| if(uri) |
| { |
| path = axutil_uri_get_path((axutil_uri_t *)uri, env); |
| } |
| else |
| { |
| return NULL; |
| } |
| if(path) |
| { |
| reader = axiom_xml_reader_create_for_file(env, path, NULL); |
| } |
| else |
| { |
| return NULL; |
| } |
| if(reader) |
| { |
| om_builder = axiom_stax_builder_create(env, reader); |
| } |
| else |
| { |
| return NULL; |
| } |
| if(om_builder) |
| { |
| doc = axiom_stax_builder_get_document(om_builder, env); |
| } |
| else |
| { |
| return NULL; |
| } |
| if(doc) |
| { |
| axiom_document_get_root_element(doc, env); |
| axiom_document_build_all(doc, env); |
| } |
| else |
| { |
| return NULL; |
| } |
| |
| return doc; |
| } |
| |
| AXIS2_EXTERN axiom_node_t* AXIS2_CALL |
| axiom_util_get_node_by_local_name( |
| const axutil_env_t *env, |
| axiom_node_t *node, |
| axis2_char_t *local_name) |
| { |
| axis2_char_t *temp_name = NULL; |
| |
| if(!node) |
| { |
| return NULL; |
| } |
| |
| if(axiom_node_get_node_type(node, env) != AXIOM_ELEMENT) |
| { |
| return NULL; |
| } |
| |
| temp_name = axiom_util_get_localname(node, env); |
| AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[rampart]Checking node %s for %s", temp_name, |
| local_name); |
| |
| if(!axutil_strcmp(temp_name, local_name)) |
| { |
| /* Gottcha.. return this node */ |
| return node; |
| } |
| else |
| { |
| /* Doesn't match? Get the children and search for them */ |
| axiom_node_t *temp_node = NULL; |
| |
| temp_node = axiom_node_get_first_element(node, env); |
| while(temp_node) |
| { |
| axiom_node_t *res_node = NULL; |
| res_node = axiom_util_get_node_by_local_name(env, temp_node, local_name); |
| if(res_node) |
| { |
| return res_node; |
| } |
| temp_node = axiom_node_get_next_sibling(temp_node, env); |
| } |
| } |
| return NULL; |
| } |
| |
| /** |
| * Creates a clone of given node |
| * @param env environment, MUST not be NULL |
| * @param node node to be cloned |
| * @return cloned node |
| */ |
| AXIS2_EXTERN axiom_node_t *AXIS2_CALL |
| axiom_util_clone_node( |
| const axutil_env_t *env, |
| axiom_node_t *node) |
| { |
| axis2_char_t* node_string = NULL; |
| axiom_node_t *clone = NULL; |
| |
| if(!node) |
| { |
| AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, |
| "Could not be able to clone the node. Given node is not valid."); |
| return NULL; |
| } |
| |
| node_string = axiom_node_sub_tree_to_string(node, env); |
| clone = axiom_node_create_from_buffer(env, node_string); |
| |
| if(node_string) |
| { |
| AXIS2_FREE(env->allocator, node_string); |
| } |
| |
| return clone; |
| } |