WsXmlAttrH xml_parser_attr_add(WsXmlNodeH node, const char *uri, const char *name, const char *value) { xmlNodePtr xmlNode = (xmlNodePtr) node; xmlNsPtr xmlNs = (xmlNsPtr) xml_parser_ns_find(node, uri, NULL, 1, 1); xmlAttrPtr xmlAttr = (xmlAttrPtr) ws_xml_find_node_attr(node, uri, name); if (xmlAttr != NULL) ws_xml_remove_node_attr((WsXmlAttrH) xmlAttr); if (xmlNs == NULL) xmlAttr = xmlNewProp(xmlNode, BAD_CAST name, BAD_CAST value); else xmlAttr = xmlNewNsProp(xmlNode, xmlNs, BAD_CAST name, BAD_CAST value); if (xmlAttr != NULL) { if (xmlNs == NULL) xmlAttr->_private = xmlGetProp(xmlNode, BAD_CAST name); else xmlAttr->_private = xmlGetNsProp(xmlNode, BAD_CAST name, xmlNs->href); } return (WsXmlAttrH) xmlAttr; }
int xml_parser_node_set(WsXmlNodeH node, int what, const char *str) { int retVal = -1; xmlNodePtr xmlNode = (xmlNodePtr) node; iWsNode *wsNode = (iWsNode *) xmlNode->_private; xmlNsPtr xmlNs; switch (what) { case XML_TEXT_VALUE: if (wsNode == NULL) xmlNode->_private = wsNode = u_zalloc(sizeof(iWsNode)); if (wsNode != NULL) { if (wsNode->valText != NULL) { xmlFree(wsNode->valText); wsNode->valText = NULL; } xmlNodeSetContent(xmlNode, BAD_CAST str); retVal = 0; } break; case XML_LOCAL_NAME: xmlNodeSetName(xmlNode, BAD_CAST str); retVal = 0; break; case XML_NS_URI: if ((xmlNs = (xmlNsPtr) xml_parser_ns_find(node, str, NULL, 1, 1)) != NULL) { xmlNode->ns = xmlNs; retVal = 0; } else retVal = 1; break; default: retVal = 1; break; } return retVal; }
static char *make_qname(WsXmlNodeH node, const char *uri, const char *name) { char *buf = NULL; if (name && uri && name) { size_t len = 1 + strlen(name); WsXmlNsH ns = xml_parser_ns_find(node, uri, NULL, 1, 1); const char *prefix = (!ns) ? NULL : ws_xml_get_ns_prefix(ns); if (prefix != NULL) len += 1 + strlen(prefix); if ((buf = u_malloc(len)) != NULL) { if (prefix != NULL && name != NULL) sprintf(buf, "%s:%s", prefix, name); else strcpy(buf, name); } } return buf; }
static xmlNodePtr make_new_xml_node(xmlNodePtr base, const char *uri, const char *name, const char *value, int xmlescape) { xmlNodePtr newNode = NULL; xmlNsPtr ns = NULL; if (uri == NULL || (ns = (xmlNsPtr) xml_parser_ns_find((WsXmlNodeH) base, uri, NULL, 1, 1)) != NULL) { if ((newNode = xmlNewNode(ns, BAD_CAST name)) != NULL) { if (value != NULL){ if (xmlescape == 1) xmlNodeAddContent(newNode, BAD_CAST value); else xmlNodeSetContent(newNode, BAD_CAST value); } newNode->_private = u_zalloc(sizeof(iWsNode)); } } return newNode; }
WsXmlNsH xml_parser_ns_add(WsXmlNodeH node, const char *uri, const char *prefix) { xmlNsPtr xmlNs = NULL; if (node && uri) { if ((xmlNs = (xmlNsPtr) xml_parser_ns_find(node, uri, NULL, 0, 0)) != NULL) { if (xmlNs->prefix != NULL) { xmlFree((char *) xmlNs->prefix); xmlNs->prefix = NULL; } if (prefix != NULL) { xmlNs->prefix = xmlStrdup(BAD_CAST prefix); } } else { xmlNs = xmlNewNs((xmlNodePtr) node, BAD_CAST uri, BAD_CAST prefix); } } return (WsXmlNsH) xmlNs; }