21#include "libxml/parser.h"
22#include "libxml/parserInternals.h"
27static bool is_blank(
const xmlChar* str)
29 while (*str !=
'\0') {
30 if (*str !=
' ' && *str != 0x9 && *str != 0xa && *str != 0xd) {
39static void cleanup_xml_node(xmlNodePtr node)
42 xmlNodePtr del =
NULL;
44 trav = node->children;
45 while (trav !=
NULL) {
52 if (is_blank(trav->content)) {
58 }
else if (trav->children !=
NULL) {
59 cleanup_xml_node(trav);
69static void soap_ignorableWhitespace(
void *ctx,
const xmlChar *
ch,
int len)
73static void soap_Comment(
void *ctx,
const xmlChar *
value)
79 xmlParserCtxtPtr ctxt =
NULL;
81 bool old_allow_url_fopen;
87 old_allow_url_fopen =
PG(allow_url_fopen);
88 PG(allow_url_fopen) = 1;
89 ctxt = xmlCreateFileParserCtxt(filename);
90 PG(allow_url_fopen) = old_allow_url_fopen;
94 php_libxml_sanitize_parse_ctxt_options(ctxt);
98 ctxt->options |= XML_PARSE_HUGE;
100 ctxt->sax->ignorableWhitespace = soap_ignorableWhitespace;
101 ctxt->sax->comment = soap_Comment;
102 ctxt->sax->warning =
NULL;
103 ctxt->sax->error =
NULL;
105 old = php_libxml_disable_entity_loader(1);
106 xmlParseDocument(ctxt);
107 php_libxml_disable_entity_loader(old);
108 if (ctxt->wellFormed) {
111 ret->URL = xmlCharStrdup(ctxt->directory);
115 xmlFreeDoc(ctxt->myDoc);
118 xmlFreeParserCtxt(ctxt);
128 cleanup_xml_node((xmlNodePtr)
ret);
135 xmlParserCtxtPtr ctxt =
NULL;
142 ctxt = xmlCreateMemoryParserCtxt(
buf, buf_size);
146 php_libxml_sanitize_parse_ctxt_options(ctxt);
147 ctxt->sax->ignorableWhitespace = soap_ignorableWhitespace;
148 ctxt->sax->comment = soap_Comment;
149 ctxt->sax->warning =
NULL;
150 ctxt->sax->error =
NULL;
154 ctxt->options |= XML_PARSE_HUGE;
156 old = php_libxml_disable_entity_loader(1);
157 xmlParseDocument(ctxt);
158 php_libxml_disable_entity_loader(old);
159 if (ctxt->wellFormed) {
162 ret->URL = xmlCharStrdup(ctxt->directory);
166 xmlFreeDoc(ctxt->myDoc);
169 xmlFreeParserCtxt(ctxt);
190 }
else if (node->parent->ns) {
191 return node->parent->ns;
193 return xmlSearchNs(node->doc, node->parent,
NULL);
202 return xmlSearchNs(node->doc, node,
NULL);
212 return (
strcmp((
char*)nsPtr->href, ns) == 0);
228 return (
strcmp((
char*)nsPtr->href, ns) == 0);
263 while (node !=
NULL) {
266 }
else if (node->children !=
NULL) {
281 while (node !=
NULL) {
300 while (node !=
NULL) {
307 if (node->children !=
NULL) {
321 const char *found =
strrchr((
const char *) inval,
':');
323 if (found !=
NULL && found != (
const char *) inval) {
324 (*namespace) =
estrndup((
const char *) inval, found - (
const char *) inval);
327 (*value) = (
const char *) inval;
strrchr(string $haystack, string $needle, bool $before_needle=false)
zend_ffi_ctype_name_buf buf
const XML_CDATA_SECTION_NODE
int node_is_equal_ex(xmlNodePtr node, char *name, char *ns)
void parse_namespace(const xmlChar *inval, const char **value, char **namespace)
xmlNsPtr attr_find_ns(xmlAttrPtr node)
xmlNodePtr get_node_recurisve_ex(xmlNodePtr node, char *name, char *ns)
xmlDocPtr soap_xmlParseMemory(const void *buf, size_t buf_size)
int attr_is_equal_ex(xmlAttrPtr node, char *name, char *ns)
xmlDocPtr soap_xmlParseFile(const char *filename)
xmlNodePtr get_node_with_attribute_ex(xmlNodePtr node, char *name, char *name_ns, char *attribute, char *value, char *attr_ns)
xmlNodePtr get_node_ex(xmlNodePtr node, char *name, char *ns)
xmlNodePtr get_node_with_attribute_recursive_ex(xmlNodePtr node, char *name, char *name_ns, char *attribute, char *value, char *attr_ns)
xmlNsPtr node_find_ns(xmlNodePtr node)
xmlAttrPtr get_attribute_ex(xmlAttrPtr node, char *name, char *ns)
#define estrndup(s, length)
strcmp(string $string1, string $string2)
#define ZEND_DIAGNOSTIC_IGNORED_END
#define ZEND_DIAGNOSTIC_IGNORED_START(warning)