while (node) {
SKIP_TEXT(node);
- _get_base_node_value(sxe, node, &value TSRMLS_CC);
-
name = (char *) node->name;
if (!name) {
- name = "CDATA";
- namelen = sizeof("CDATA");
+ goto next_iter;
} else {
namelen = xmlStrlen(node->name) + 1;
}
+ _get_base_node_value(sxe, node, &value TSRMLS_CC);
+
h = zend_hash_func(name, namelen);
if (zend_hash_quick_find(rv, name, namelen, h, (void **) &data_ptr) == SUCCESS) {
if (Z_TYPE_PP(data_ptr) == IS_ARRAY) {
sxe_class_name_get(zval *object, char **class_name, zend_uint *class_name_len, int parent TSRMLS_DC)
{
*class_name = estrdup("simplexml_element");
- *class_name_len = sizeof("simplexml_element");
+ *class_name_len = sizeof("simplexml_element")-1;
return 0;
}
static void php_sxe_iterator_current(php_sxe_iterator *iterator TSRMLS_DC)
{
+ xmlNodePtr node;
+
while (iterator->node) {
- SKIP_TEXT(iterator->node);
+ node = iterator->node;
+
+ SKIP_TEXT(node);
+
+ do if (node->ns) {
+ if (node->parent->ns) {
+ if (!xmlStrcmp(node->ns->href, node->parent->ns->href)) {
+ break;
+ }
+ }
+ } while (0);
- _get_base_node_value(iterator->sxe, iterator->node, &iterator->data TSRMLS_CC);
-
if (!iterator->node->name) {
- iterator->name = "CDATA";
- iterator->namelen = sizeof("CDATA");
+ goto next_iter;
} else {
- iterator->namelen = xmlStrlen(iterator->node->name)+1;
- iterator->name = (char *) iterator->node->name;
+ iterator->namelen = xmlStrlen(node->name)+1;
+ iterator->name = (char *) node->name;
+ MAKE_STD_ZVAL(iterator->data);
+ _node_as_zval(iterator->sxe, node, iterator->data TSRMLS_CC);
}
break;
next_iter:
--- /dev/null
+--TEST--
+SimpleXML and XPath
+--SKIPIF--
+<?php if (!extension_loaded("simplexml")) print "skip"; ?>
+--FILE--
+<?php
+$sxe = simplexml_load_file(dirname(__FILE__).'/009.xml');
+foreach($sxe as $name=>$val) {
+ var_dump($name);
+ var_dump(get_class($val));
+ var_dump(trim((string)$val));
+}
+?>
+===DONE===
+--EXPECT--
+string(5) "elem1"
+string(17) "simplexml_element"
+string(10) "Bla bla 1."
+string(6) "elem11"
+string(17) "simplexml_element"
+string(10) "Bla bla 2."
+===DONE===