mirror of
https://github.com/php/php-src.git
synced 2025-08-19 08:49:28 +02:00
- Change var_dump to include all that is reachable, incl. @attributes
- Adapt tests and add new one
This commit is contained in:
parent
7ae517c131
commit
b4762f13f1
25 changed files with 650 additions and 328 deletions
|
@ -38,6 +38,8 @@
|
||||||
#include "ext/spl/spl_sxe.h"
|
#include "ext/spl/spl_sxe.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define SXE_ELEMENT_BY_NAME 0
|
||||||
|
|
||||||
zend_class_entry *sxe_class_entry = NULL;
|
zend_class_entry *sxe_class_entry = NULL;
|
||||||
|
|
||||||
ZEND_API zend_class_entry *sxe_get_element_class_entry(TSRMLS_D)
|
ZEND_API zend_class_entry *sxe_get_element_class_entry(TSRMLS_D)
|
||||||
|
@ -112,10 +114,7 @@ static xmlNodePtr php_sxe_get_first_node(php_sxe_object *sxe, xmlNodePtr node TS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* {{{ match_ns()
|
static inline int match_ns(php_sxe_object *sxe, xmlNodePtr node, xmlChar *name) /* {{{ */
|
||||||
*/
|
|
||||||
static inline int
|
|
||||||
match_ns(php_sxe_object *sxe, xmlNodePtr node, xmlChar *name)
|
|
||||||
{
|
{
|
||||||
if (name == NULL && (node->ns == NULL || node->ns->prefix == NULL)) {
|
if (name == NULL && (node->ns == NULL || node->ns->prefix == NULL)) {
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -129,9 +128,8 @@ match_ns(php_sxe_object *sxe, xmlNodePtr node, xmlChar *name)
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
/* {{{ sxe_get_element_node()
|
static xmlNodePtr sxe_get_element_by_offset(php_sxe_object *sxe, long offset, xmlNodePtr node) /* {{{ */
|
||||||
*/
|
{
|
||||||
static xmlNodePtr sxe_get_element_by_offset(php_sxe_object *sxe, long offset, xmlNodePtr node) {
|
|
||||||
long nodendx = 0;
|
long nodendx = 0;
|
||||||
|
|
||||||
if (sxe->iter.type == SXE_ITER_NONE) {
|
if (sxe->iter.type == SXE_ITER_NONE) {
|
||||||
|
@ -156,6 +154,71 @@ next_iter:
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
#if SXE_ELEMENT_BY_NAME
|
||||||
|
static xmlNodePtr sxe_find_element_by_name(php_sxe_object *sxe, xmlNodePtr node, char *name TSRMLS_DC) /* {{{ */
|
||||||
|
{
|
||||||
|
while (node) {
|
||||||
|
SKIP_TEXT(node)
|
||||||
|
if (node->type == XML_ELEMENT_NODE && match_ns(sxe, node, sxe->iter.nsprefix)) {
|
||||||
|
if (!xmlStrcmp(node->name, name)) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next_iter:
|
||||||
|
node = node->next;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
} /* }}} */
|
||||||
|
|
||||||
|
static xmlNodePtr sxe_get_element_by_name(php_sxe_object *sxe, xmlNodePtr node, char **name, int *type TSRMLS_DC) /* {{{ */
|
||||||
|
{
|
||||||
|
int orgtype;
|
||||||
|
xmlNodePtr orgnode = node;
|
||||||
|
xmlNodePtr retnode = NULL;
|
||||||
|
|
||||||
|
if (sxe->iter.type != SXE_ITER_ATTRLIST)
|
||||||
|
{
|
||||||
|
orgtype = sxe->iter.type;
|
||||||
|
if (sxe->iter.type == SXE_ITER_NONE) {
|
||||||
|
sxe->iter.type = SXE_ITER_CHILD;
|
||||||
|
}
|
||||||
|
node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
|
||||||
|
sxe->iter.type = orgtype;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sxe->iter.type == SXE_ITER_ELEMENT) {
|
||||||
|
orgnode = sxe_find_element_by_name(sxe, node, sxe->iter.name TSRMLS_CC);
|
||||||
|
node = orgnode->children;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (node) {
|
||||||
|
SKIP_TEXT(node)
|
||||||
|
if (node->type == XML_ELEMENT_NODE && match_ns(sxe, node, sxe->iter.nsprefix)) {
|
||||||
|
if (!xmlStrcmp(node->name, *name)) {
|
||||||
|
if (1||retnode)
|
||||||
|
{
|
||||||
|
*type = SXE_ITER_ELEMENT;
|
||||||
|
return orgnode;
|
||||||
|
}
|
||||||
|
retnode = node;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next_iter:
|
||||||
|
node = node->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (retnode)
|
||||||
|
{
|
||||||
|
*type = SXE_ITER_NONE;
|
||||||
|
*name = NULL;
|
||||||
|
return retnode;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
/* }}} */
|
||||||
|
#endif /* SXE_ELEMENT_BY_NAME */
|
||||||
|
|
||||||
/* {{{ sxe_prop_dim_read()
|
/* {{{ sxe_prop_dim_read()
|
||||||
*/
|
*/
|
||||||
static zval * sxe_prop_dim_read(zval *object, zval *member, zend_bool elements, zend_bool attribs, zend_bool silent TSRMLS_DC)
|
static zval * sxe_prop_dim_read(zval *object, zval *member, zend_bool elements, zend_bool attribs, zend_bool silent TSRMLS_DC)
|
||||||
|
@ -175,6 +238,7 @@ static zval * sxe_prop_dim_read(zval *object, zval *member, zend_bool elements,
|
||||||
attribs = 0;
|
attribs = 0;
|
||||||
elements = 1;
|
elements = 1;
|
||||||
}
|
}
|
||||||
|
name = NULL;
|
||||||
} else {
|
} else {
|
||||||
if (Z_TYPE_P(member) != IS_STRING) {
|
if (Z_TYPE_P(member) != IS_STRING) {
|
||||||
tmp_zv = *member;
|
tmp_zv = *member;
|
||||||
|
@ -182,24 +246,23 @@ static zval * sxe_prop_dim_read(zval *object, zval *member, zend_bool elements,
|
||||||
member = &tmp_zv;
|
member = &tmp_zv;
|
||||||
convert_to_string(member);
|
convert_to_string(member);
|
||||||
}
|
}
|
||||||
|
name = Z_STRVAL_P(member);
|
||||||
}
|
}
|
||||||
|
|
||||||
MAKE_STD_ZVAL(return_value);
|
MAKE_STD_ZVAL(return_value);
|
||||||
ZVAL_NULL(return_value);
|
ZVAL_NULL(return_value);
|
||||||
|
|
||||||
name = Z_STRVAL_P(member);
|
|
||||||
|
|
||||||
GET_NODE(sxe, node);
|
GET_NODE(sxe, node);
|
||||||
|
|
||||||
if (sxe->iter.type != SXE_ITER_CHILD && sxe->iter.type != SXE_ITER_ATTRLIST) {
|
if (sxe->iter.type == SXE_ITER_ATTRLIST) {
|
||||||
|
attribs = 1;
|
||||||
|
elements = 0;
|
||||||
|
} else if (sxe->iter.type != SXE_ITER_CHILD && sxe->iter.type != SXE_ITER_ATTRLIST) {
|
||||||
node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
|
node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node) {
|
if (node) {
|
||||||
if (attribs) {
|
if (attribs) {
|
||||||
if (Z_TYPE_P(member) == IS_LONG && sxe->iter.type != SXE_ITER_ATTRLIST) {
|
if (Z_TYPE_P(member) != IS_LONG || sxe->iter.type == SXE_ITER_ATTRLIST) {
|
||||||
attr = NULL;
|
|
||||||
} else {
|
|
||||||
attr = node->properties;
|
attr = node->properties;
|
||||||
if (Z_TYPE_P(member) == IS_LONG) {
|
if (Z_TYPE_P(member) == IS_LONG) {
|
||||||
while (attr && nodendx <= Z_LVAL_P(member)) {
|
while (attr && nodendx <= Z_LVAL_P(member)) {
|
||||||
|
@ -237,7 +300,17 @@ static zval * sxe_prop_dim_read(zval *object, zval *member, zend_bool elements,
|
||||||
_node_as_zval(sxe, node, return_value, SXE_ITER_NONE, NULL, sxe->iter.nsprefix TSRMLS_CC);
|
_node_as_zval(sxe, node, return_value, SXE_ITER_NONE, NULL, sxe->iter.nsprefix TSRMLS_CC);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
#if SXE_ELEMENT_BY_NAME
|
||||||
|
int newtype;
|
||||||
|
|
||||||
|
GET_NODE(sxe, node);
|
||||||
|
node = sxe_get_element_by_name(sxe, node, &name, &newtype TSRMLS_CC);
|
||||||
|
if (node) {
|
||||||
|
_node_as_zval(sxe, node, return_value, newtype, name, sxe->iter.nsprefix TSRMLS_CC);
|
||||||
|
}
|
||||||
|
#else
|
||||||
_node_as_zval(sxe, node, return_value, SXE_ITER_ELEMENT, name, sxe->iter.nsprefix TSRMLS_CC);
|
_node_as_zval(sxe, node, return_value, SXE_ITER_ELEMENT, name, sxe->iter.nsprefix TSRMLS_CC);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -671,19 +744,41 @@ _get_base_node_value(php_sxe_object *sxe_ref, xmlNodePtr node, zval **value, cha
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
/* {{{ sxe_properties_get()
|
static void sxe_properties_add(HashTable *rv, char *name, int namelen, zval *value TSRMLS_DC)
|
||||||
*/
|
|
||||||
static HashTable *
|
|
||||||
sxe_properties_get(zval *object TSRMLS_DC)
|
|
||||||
{
|
{
|
||||||
zval **data_ptr;
|
zval **data_ptr;
|
||||||
zval *value;
|
|
||||||
zval *newptr;
|
zval *newptr;
|
||||||
|
ulong 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) {
|
||||||
|
zend_hash_next_index_insert(Z_ARRVAL_PP(data_ptr), &value, sizeof(zval *), NULL);
|
||||||
|
} else {
|
||||||
|
MAKE_STD_ZVAL(newptr);
|
||||||
|
array_init(newptr);
|
||||||
|
|
||||||
|
zval_add_ref(data_ptr);
|
||||||
|
zend_hash_next_index_insert(Z_ARRVAL_P(newptr), data_ptr, sizeof(zval *), NULL);
|
||||||
|
zend_hash_next_index_insert(Z_ARRVAL_P(newptr), &value, sizeof(zval *), NULL);
|
||||||
|
|
||||||
|
zend_hash_quick_update(rv, name, namelen, h, &newptr, sizeof(zval *), NULL);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
zend_hash_quick_update(rv, name, namelen, h, &value, sizeof(zval *), NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* {{{ sxe_properties_get()
|
||||||
|
*/
|
||||||
|
static HashTable * sxe_properties_get(zval *object TSRMLS_DC)
|
||||||
|
{
|
||||||
|
zval *value;
|
||||||
|
zval *zattr;
|
||||||
HashTable *rv;
|
HashTable *rv;
|
||||||
php_sxe_object *sxe;
|
php_sxe_object *sxe;
|
||||||
char *name;
|
char *name;
|
||||||
xmlNodePtr node;
|
xmlNodePtr node;
|
||||||
ulong h;
|
xmlAttrPtr attr;
|
||||||
int namelen;
|
int namelen;
|
||||||
|
|
||||||
sxe = php_sxe_fetch_object(object TSRMLS_CC);
|
sxe = php_sxe_fetch_object(object TSRMLS_CC);
|
||||||
|
@ -698,9 +793,31 @@ sxe_properties_get(zval *object TSRMLS_DC)
|
||||||
}
|
}
|
||||||
|
|
||||||
GET_NODE(sxe, node);
|
GET_NODE(sxe, node);
|
||||||
|
if (1||sxe->iter.type != SXE_ITER_CHILD) {
|
||||||
|
if (sxe->iter.type == SXE_ITER_ELEMENT) {
|
||||||
node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
|
node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
|
||||||
|
}
|
||||||
|
attr = node ? (xmlAttrPtr)node->properties : NULL;
|
||||||
|
zattr = NULL;
|
||||||
|
while (attr) {
|
||||||
|
if (match_ns(sxe, (xmlNodePtr)attr, sxe->iter.nsprefix)) {
|
||||||
|
MAKE_STD_ZVAL(value);
|
||||||
|
ZVAL_STRING(value, xmlNodeListGetString((xmlDocPtr) sxe->document->ptr, attr->children, 1), 1);
|
||||||
|
namelen = xmlStrlen(attr->name) + 1;
|
||||||
|
if (!zattr) {
|
||||||
|
MAKE_STD_ZVAL(zattr);
|
||||||
|
array_init(zattr);
|
||||||
|
sxe_properties_add(rv, "@attributes", sizeof("@attributes"), zattr TSRMLS_CC);
|
||||||
|
}
|
||||||
|
add_assoc_zval_ex(zattr, (char*)attr->name, namelen, value);
|
||||||
|
}
|
||||||
|
attr = attr->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (node) {
|
GET_NODE(sxe, node);
|
||||||
|
node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
|
||||||
|
if (node && sxe->iter.type != SXE_ITER_ATTRLIST) {
|
||||||
if (node->type == XML_ATTRIBUTE_NODE) {
|
if (node->type == XML_ATTRIBUTE_NODE) {
|
||||||
MAKE_STD_ZVAL(value);
|
MAKE_STD_ZVAL(value);
|
||||||
ZVAL_U_STRING(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), value, xmlNodeListGetString(node->doc, node->children, 1), 1);
|
ZVAL_U_STRING(ZEND_U_CONVERTER(UG(runtime_encoding_conv)), value, xmlNodeListGetString(node->doc, node->children, 1), 1);
|
||||||
|
@ -735,24 +852,7 @@ sxe_properties_get(zval *object TSRMLS_DC)
|
||||||
|
|
||||||
_get_base_node_value(sxe, node, &value, sxe->iter.nsprefix TSRMLS_CC);
|
_get_base_node_value(sxe, node, &value, sxe->iter.nsprefix TSRMLS_CC);
|
||||||
|
|
||||||
h = zend_hash_func(name, namelen);
|
sxe_properties_add(rv, name, namelen, value TSRMLS_CC);
|
||||||
if (zend_hash_quick_find(rv, name, namelen, h, (void **) &data_ptr) == SUCCESS) {
|
|
||||||
if (Z_TYPE_PP(data_ptr) == IS_ARRAY) {
|
|
||||||
zend_hash_next_index_insert(Z_ARRVAL_PP(data_ptr), &value, sizeof(zval *), NULL);
|
|
||||||
} else {
|
|
||||||
MAKE_STD_ZVAL(newptr);
|
|
||||||
array_init(newptr);
|
|
||||||
|
|
||||||
zval_add_ref(data_ptr);
|
|
||||||
zend_hash_next_index_insert(Z_ARRVAL_P(newptr), data_ptr, sizeof(zval *), NULL);
|
|
||||||
zend_hash_next_index_insert(Z_ARRVAL_P(newptr), &value, sizeof(zval *), NULL);
|
|
||||||
|
|
||||||
zend_hash_quick_update(rv, name, namelen, h, &newptr, sizeof(zval *), NULL);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
zend_hash_quick_update(rv, name, namelen, h, &value, sizeof(zval *), NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
next_iter:
|
next_iter:
|
||||||
node = node->next;
|
node = node->next;
|
||||||
}
|
}
|
||||||
|
@ -1007,8 +1107,7 @@ SXE_METHOD(attributes)
|
||||||
|
|
||||||
/* {{{ cast_object()
|
/* {{{ cast_object()
|
||||||
*/
|
*/
|
||||||
static int
|
static int cast_object(zval *object, int type, char *contents TSRMLS_DC)
|
||||||
cast_object(zval *object, int type, char *contents TSRMLS_DC)
|
|
||||||
{
|
{
|
||||||
if (contents) {
|
if (contents) {
|
||||||
ZVAL_STRINGL(object, contents, strlen(contents), 1);
|
ZVAL_STRINGL(object, contents, strlen(contents), 1);
|
||||||
|
@ -1046,8 +1145,7 @@ cast_object(zval *object, int type, char *contents TSRMLS_DC)
|
||||||
|
|
||||||
/* {{{ sxe_object_cast()
|
/* {{{ sxe_object_cast()
|
||||||
*/
|
*/
|
||||||
static int
|
static int sxe_object_cast(zval *readobj, zval *writeobj, int type TSRMLS_DC)
|
||||||
sxe_object_cast(zval *readobj, zval *writeobj, int type TSRMLS_DC)
|
|
||||||
{
|
{
|
||||||
php_sxe_object *sxe;
|
php_sxe_object *sxe;
|
||||||
char *contents = NULL;
|
char *contents = NULL;
|
||||||
|
|
220
ext/simplexml/tests/000.phpt
Executable file
220
ext/simplexml/tests/000.phpt
Executable file
|
@ -0,0 +1,220 @@
|
||||||
|
--TEST--
|
||||||
|
SimpleXML: var_dump()
|
||||||
|
--SKIPIF--
|
||||||
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$sxe = simplexml_load_file(dirname(__FILE__).'/000.xml');
|
||||||
|
|
||||||
|
function test($what)
|
||||||
|
{
|
||||||
|
global $sxe;
|
||||||
|
echo "===$what\n";
|
||||||
|
eval("var_dump(isset(\$$what));");
|
||||||
|
eval("var_dump(\$$what);");
|
||||||
|
}
|
||||||
|
|
||||||
|
test('sxe');
|
||||||
|
test('sxe->elem1');
|
||||||
|
test('sxe->elem1[0]');
|
||||||
|
test('sxe->elem1[0]->elem2');
|
||||||
|
test('sxe->elem1[0]->elem2->bla');
|
||||||
|
test('sxe->elem1[0]["attr1"]');
|
||||||
|
test('sxe->elem1[0]->attr1');
|
||||||
|
test('sxe->elem1[1]');
|
||||||
|
test('sxe->elem1[2]');
|
||||||
|
test('sxe->elem11');
|
||||||
|
test('sxe->elem11->elem111');
|
||||||
|
test('sxe->elem11->elem111->elem1111');
|
||||||
|
test('sxe->elem22');
|
||||||
|
test('sxe->elem22->elem222');
|
||||||
|
test('sxe->elem22->attr22');
|
||||||
|
test('sxe->elem22["attr22"]');
|
||||||
|
|
||||||
|
?>
|
||||||
|
===DONE===
|
||||||
|
<?php exit(0); ?>
|
||||||
|
--EXPECTF--
|
||||||
|
===sxe
|
||||||
|
bool(true)
|
||||||
|
object(SimpleXMLElement)#%d (3) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(1) {
|
||||||
|
["id"]=>
|
||||||
|
string(3) "123"
|
||||||
|
}
|
||||||
|
["elem1"]=>
|
||||||
|
array(2) {
|
||||||
|
[0]=>
|
||||||
|
string(36) "There is some text.Here is some more"
|
||||||
|
[1]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(2) {
|
||||||
|
["attr1"]=>
|
||||||
|
string(2) "11"
|
||||||
|
["attr2"]=>
|
||||||
|
string(2) "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
["elem11"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["elem111"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["elem1111"]=>
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
===sxe->elem1
|
||||||
|
bool(true)
|
||||||
|
object(SimpleXMLElement)#%d (3) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(2) {
|
||||||
|
["attr1"]=>
|
||||||
|
string(5) "first"
|
||||||
|
["attr2"]=>
|
||||||
|
string(6) "second"
|
||||||
|
}
|
||||||
|
["comment"]=>
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
["elem2"]=>
|
||||||
|
object(SimpleXMLElement)#%d (2) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(2) {
|
||||||
|
["att25"]=>
|
||||||
|
string(2) "25"
|
||||||
|
["att42"]=>
|
||||||
|
string(2) "42"
|
||||||
|
}
|
||||||
|
["elem3"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["elem4"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["test"]=>
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
===sxe->elem1[0]
|
||||||
|
bool(true)
|
||||||
|
object(SimpleXMLElement)#%d (3) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(2) {
|
||||||
|
["attr1"]=>
|
||||||
|
string(5) "first"
|
||||||
|
["attr2"]=>
|
||||||
|
string(6) "second"
|
||||||
|
}
|
||||||
|
["comment"]=>
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
["elem2"]=>
|
||||||
|
object(SimpleXMLElement)#%d (2) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(2) {
|
||||||
|
["att25"]=>
|
||||||
|
string(2) "25"
|
||||||
|
["att42"]=>
|
||||||
|
string(2) "42"
|
||||||
|
}
|
||||||
|
["elem3"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["elem4"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["test"]=>
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
===sxe->elem1[0]->elem2
|
||||||
|
bool(true)
|
||||||
|
object(SimpleXMLElement)#%d (2) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(2) {
|
||||||
|
["att25"]=>
|
||||||
|
string(2) "25"
|
||||||
|
["att42"]=>
|
||||||
|
string(2) "42"
|
||||||
|
}
|
||||||
|
["elem3"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["elem4"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["test"]=>
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
===sxe->elem1[0]->elem2->bla
|
||||||
|
bool(false)
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
===sxe->elem1[0]["attr1"]
|
||||||
|
bool(true)
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
[0]=>
|
||||||
|
string(5) "first"
|
||||||
|
}
|
||||||
|
===sxe->elem1[0]->attr1
|
||||||
|
bool(false)
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
===sxe->elem1[1]
|
||||||
|
bool(true)
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(2) {
|
||||||
|
["attr1"]=>
|
||||||
|
string(2) "11"
|
||||||
|
["attr2"]=>
|
||||||
|
string(2) "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
===sxe->elem1[2]
|
||||||
|
bool(false)
|
||||||
|
NULL
|
||||||
|
===sxe->elem11
|
||||||
|
bool(true)
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["elem111"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["elem1111"]=>
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
===sxe->elem11->elem111
|
||||||
|
bool(true)
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["elem1111"]=>
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
===sxe->elem11->elem111->elem1111
|
||||||
|
bool(true)
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
===sxe->elem22
|
||||||
|
bool(false)
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
===sxe->elem22->elem222
|
||||||
|
bool(false)
|
||||||
|
NULL
|
||||||
|
===sxe->elem22->attr22
|
||||||
|
bool(false)
|
||||||
|
NULL
|
||||||
|
===sxe->elem22["attr22"]
|
||||||
|
bool(false)
|
||||||
|
NULL
|
||||||
|
===DONE===
|
16
ext/simplexml/tests/000.xml
Executable file
16
ext/simplexml/tests/000.xml
Executable file
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version='1.0'?>
|
||||||
|
<!DOCTYPE sxe SYSTEM "sxe.dtd" [
|
||||||
|
<!ENTITY % incent SYSTEM "sxe.ent">
|
||||||
|
%incent;
|
||||||
|
]>
|
||||||
|
<sxe id="123">
|
||||||
|
<elem1 attr1='first' attr2='second'>There is some text.<!-- comment --><elem2 att25='25' att42='42'>
|
||||||
|
<elem3>
|
||||||
|
<elem4>
|
||||||
|
<?test processing instruction ?>
|
||||||
|
</elem4>
|
||||||
|
</elem3>
|
||||||
|
</elem2>Here is some more</elem1>
|
||||||
|
<elem1 attr1='11' attr2='12'/>
|
||||||
|
<elem11><elem111><elem1111/></elem111></elem11>
|
||||||
|
</sxe>
|
|
@ -5,39 +5,39 @@ SimpleXML: Simple document
|
||||||
--FILE--
|
--FILE--
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
$sxe = simplexml_load_file(dirname(__FILE__).'/sxe.xml');
|
var_dump(simplexml_load_file(dirname(__FILE__).'/sxe.xml'));
|
||||||
|
|
||||||
print_r($sxe);
|
|
||||||
|
|
||||||
echo "---Done---\n";
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
--EXPECT--
|
===DONE===
|
||||||
SimpleXMLElement Object
|
--EXPECTF--
|
||||||
(
|
object(SimpleXMLElement)#%d (2) {
|
||||||
[elem1] => SimpleXMLElement Object
|
["@attributes"]=>
|
||||||
(
|
array(1) {
|
||||||
[comment] => SimpleXMLElement Object
|
["id"]=>
|
||||||
(
|
string(5) "elem1"
|
||||||
)
|
}
|
||||||
|
["elem1"]=>
|
||||||
[elem2] => SimpleXMLElement Object
|
object(SimpleXMLElement)#%d (3) {
|
||||||
(
|
["@attributes"]=>
|
||||||
[elem3] => SimpleXMLElement Object
|
array(1) {
|
||||||
(
|
["attr1"]=>
|
||||||
[elem4] => SimpleXMLElement Object
|
string(5) "first"
|
||||||
(
|
}
|
||||||
[test] => SimpleXMLElement Object
|
["comment"]=>
|
||||||
(
|
object(SimpleXMLElement)#%d (0) {
|
||||||
)
|
}
|
||||||
|
["elem2"]=>
|
||||||
)
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["elem3"]=>
|
||||||
)
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["elem4"]=>
|
||||||
)
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["test"]=>
|
||||||
)
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
)
|
}
|
||||||
---Done---
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
===DONE===
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and clone
|
SimpleXML: clone
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
--FILE--
|
--FILE--
|
||||||
|
@ -26,37 +26,39 @@ $sxe = simplexml_load_string($xml);
|
||||||
|
|
||||||
$copy = clone $sxe;
|
$copy = clone $sxe;
|
||||||
|
|
||||||
print_r($copy);
|
var_dump($copy);
|
||||||
|
|
||||||
echo "---Done---\n";
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
--EXPECT--
|
===DONE===
|
||||||
SimpleXMLElement Object
|
--EXPECTF--
|
||||||
(
|
object(SimpleXMLElement)#%d (2) {
|
||||||
[elem1] => SimpleXMLElement Object
|
["@attributes"]=>
|
||||||
(
|
array(1) {
|
||||||
[comment] => SimpleXMLElement Object
|
["id"]=>
|
||||||
(
|
string(5) "elem1"
|
||||||
)
|
}
|
||||||
|
["elem1"]=>
|
||||||
[elem2] => SimpleXMLElement Object
|
object(SimpleXMLElement)#%d (3) {
|
||||||
(
|
["@attributes"]=>
|
||||||
[elem3] => SimpleXMLElement Object
|
array(1) {
|
||||||
(
|
["attr1"]=>
|
||||||
[elem4] => SimpleXMLElement Object
|
string(5) "first"
|
||||||
(
|
}
|
||||||
[test] => SimpleXMLElement Object
|
["comment"]=>
|
||||||
(
|
object(SimpleXMLElement)#%d (0) {
|
||||||
)
|
}
|
||||||
|
["elem2"]=>
|
||||||
)
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["elem3"]=>
|
||||||
)
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["elem4"]=>
|
||||||
)
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["test"]=>
|
||||||
)
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
)
|
}
|
||||||
---Done---
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
===DONE===
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and Entities
|
SimpleXML: Entities
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
--FILE--
|
--FILE--
|
||||||
|
@ -26,44 +26,44 @@ $xml =<<<EOF
|
||||||
</sxe>
|
</sxe>
|
||||||
EOF;
|
EOF;
|
||||||
|
|
||||||
$sxe = simplexml_load_string($xml);
|
var_dump(simplexml_load_string($xml));
|
||||||
|
|
||||||
print_r($sxe);
|
|
||||||
|
|
||||||
echo "---Done---\n";
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
--EXPECT--
|
===DONE===
|
||||||
SimpleXMLElement Object
|
--EXPECTF--
|
||||||
(
|
object(SimpleXMLElement)#%d (2) {
|
||||||
[elem1] => SimpleXMLElement Object
|
["@attributes"]=>
|
||||||
(
|
array(1) {
|
||||||
[comment] => SimpleXMLElement Object
|
["id"]=>
|
||||||
(
|
string(5) "elem1"
|
||||||
)
|
}
|
||||||
|
["elem1"]=>
|
||||||
[elem2] => SimpleXMLElement Object
|
object(SimpleXMLElement)#%d (3) {
|
||||||
(
|
["@attributes"]=>
|
||||||
[elem3] => SimpleXMLElement Object
|
array(1) {
|
||||||
(
|
["attr1"]=>
|
||||||
[included-entity] => SimpleXMLElement Object
|
string(5) "first"
|
||||||
(
|
}
|
||||||
[included-entity] => This is text included from an entity
|
["comment"]=>
|
||||||
)
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
[elem4] => SimpleXMLElement Object
|
["elem2"]=>
|
||||||
(
|
object(SimpleXMLElement)#%d (1) {
|
||||||
[test] => SimpleXMLElement Object
|
["elem3"]=>
|
||||||
(
|
object(SimpleXMLElement)#%d (2) {
|
||||||
)
|
["included-entity"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
)
|
["included-entity"]=>
|
||||||
|
string(36) "This is text included from an entity"
|
||||||
)
|
}
|
||||||
|
["elem4"]=>
|
||||||
)
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["test"]=>
|
||||||
)
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
)
|
}
|
||||||
---Done---
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
===DONE===
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and CDATA
|
SimpleXML: CDATA
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
--FILE--
|
--FILE--
|
||||||
|
@ -25,7 +25,7 @@ $sxe = simplexml_load_string(<<<EOF
|
||||||
EOF
|
EOF
|
||||||
);
|
);
|
||||||
|
|
||||||
print_r($sxe);
|
var_dump($sxe);
|
||||||
|
|
||||||
$elem1 = $sxe->elem1;
|
$elem1 = $sxe->elem1;
|
||||||
$elem2 = $elem1->elem2;
|
$elem2 = $elem1->elem2;
|
||||||
|
@ -33,63 +33,36 @@ var_dump(trim((string)$elem2));
|
||||||
|
|
||||||
?>
|
?>
|
||||||
===DONE===
|
===DONE===
|
||||||
--EXPECT--
|
--EXPECTF--
|
||||||
SimpleXMLElement Object
|
object(SimpleXMLElement)#%d (2) {
|
||||||
(
|
["@attributes"]=>
|
||||||
[elem1] => SimpleXMLElement Object
|
array(1) {
|
||||||
(
|
["id"]=>
|
||||||
[comment] => SimpleXMLElement Object
|
string(5) "elem1"
|
||||||
(
|
}
|
||||||
)
|
["elem1"]=>
|
||||||
|
object(SimpleXMLElement)#%d (3) {
|
||||||
[elem2] => SimpleXMLElement Object
|
["@attributes"]=>
|
||||||
(
|
array(1) {
|
||||||
[elem3] => SimpleXMLElement Object
|
["attr1"]=>
|
||||||
(
|
string(5) "first"
|
||||||
[elem4] => SimpleXMLElement Object
|
}
|
||||||
(
|
["comment"]=>
|
||||||
[test] => SimpleXMLElement Object
|
object(SimpleXMLElement)#%d (0) {
|
||||||
(
|
}
|
||||||
)
|
["elem2"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
)
|
["elem3"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
)
|
["elem4"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
)
|
["test"]=>
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
)
|
}
|
||||||
|
}
|
||||||
)
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
string(11) "CDATA block"
|
string(11) "CDATA block"
|
||||||
===DONE===
|
===DONE===
|
||||||
--UEXPECT--
|
|
||||||
SimpleXMLElement Object
|
|
||||||
(
|
|
||||||
[elem1] => SimpleXMLElement Object
|
|
||||||
(
|
|
||||||
[comment] => SimpleXMLElement Object
|
|
||||||
(
|
|
||||||
)
|
|
||||||
|
|
||||||
[elem2] => SimpleXMLElement Object
|
|
||||||
(
|
|
||||||
[elem3] => SimpleXMLElement Object
|
|
||||||
(
|
|
||||||
[elem4] => SimpleXMLElement Object
|
|
||||||
(
|
|
||||||
[test] => SimpleXMLElement Object
|
|
||||||
(
|
|
||||||
)
|
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
)
|
|
||||||
|
|
||||||
)
|
|
||||||
unicode(11) "CDATA block"
|
|
||||||
===DONE===
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and text data
|
SimpleXML: Text data
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
--FILE--
|
--FILE--
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and foreach
|
SimpleXML: foreach
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
--FILE--
|
--FILE--
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and attributes
|
SimpleXML: Attributes
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
--FILE--
|
--FILE--
|
||||||
|
@ -48,7 +48,12 @@ var_dump($a);
|
||||||
===Done===
|
===Done===
|
||||||
--EXPECTF--
|
--EXPECTF--
|
||||||
===Property===
|
===Property===
|
||||||
object(SimpleXMLElement)#%d (2) {
|
object(SimpleXMLElement)#%d (3) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(1) {
|
||||||
|
["attr1"]=>
|
||||||
|
string(5) "first"
|
||||||
|
}
|
||||||
["comment"]=>
|
["comment"]=>
|
||||||
object(SimpleXMLElement)#%d (0) {
|
object(SimpleXMLElement)#%d (0) {
|
||||||
}
|
}
|
||||||
|
@ -90,47 +95,3 @@ NULL
|
||||||
int(4)
|
int(4)
|
||||||
int(4)
|
int(4)
|
||||||
===Done===
|
===Done===
|
||||||
--UEXPECTF--
|
|
||||||
===Property===
|
|
||||||
object(SimpleXMLElement)#%d (2) {
|
|
||||||
[u"comment"]=>
|
|
||||||
object(SimpleXMLElement)#%d (0) {
|
|
||||||
}
|
|
||||||
[u"elem2"]=>
|
|
||||||
object(SimpleXMLElement)#%d (1) {
|
|
||||||
[u"elem3"]=>
|
|
||||||
object(SimpleXMLElement)#%d (1) {
|
|
||||||
[u"elem4"]=>
|
|
||||||
object(SimpleXMLElement)#%d (1) {
|
|
||||||
[u"test"]=>
|
|
||||||
object(SimpleXMLElement)#%d (0) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
===Array===
|
|
||||||
object(SimpleXMLElement)#%d (1) {
|
|
||||||
[0]=>
|
|
||||||
unicode(5) "elem1"
|
|
||||||
}
|
|
||||||
object(SimpleXMLElement)#%d (1) {
|
|
||||||
[0]=>
|
|
||||||
unicode(5) "first"
|
|
||||||
}
|
|
||||||
===Set===
|
|
||||||
object(SimpleXMLElement)#%d (1) {
|
|
||||||
[0]=>
|
|
||||||
unicode(8) "Changed1"
|
|
||||||
}
|
|
||||||
object(SimpleXMLElement)#%d (1) {
|
|
||||||
[0]=>
|
|
||||||
unicode(2) "12"
|
|
||||||
}
|
|
||||||
===Unset===
|
|
||||||
NULL
|
|
||||||
NULL
|
|
||||||
===Misc.===
|
|
||||||
int(4)
|
|
||||||
int(4)
|
|
||||||
===Done===
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and XPath
|
SimpleXML: XPath
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
--FILE--
|
--FILE--
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and foreach
|
SimpleXML: foreach
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
--FILE--
|
--FILE--
|
||||||
|
|
|
@ -26,38 +26,39 @@ $xml =<<<EOF
|
||||||
</sxe>
|
</sxe>
|
||||||
EOF;
|
EOF;
|
||||||
|
|
||||||
$sxe = simplexml_load_string($xml, 'simplexml_inherited');
|
var_dump(simplexml_load_string($xml, 'simplexml_inherited'));
|
||||||
|
|
||||||
print_r($sxe);
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
===DONE===
|
===DONE===
|
||||||
--EXPECT--
|
--EXPECTF--
|
||||||
simplexml_inherited Object
|
object(simplexml_inherited)#%d (2) {
|
||||||
(
|
["@attributes"]=>
|
||||||
[elem1] => simplexml_inherited Object
|
array(1) {
|
||||||
(
|
["id"]=>
|
||||||
[comment] => simplexml_inherited Object
|
string(5) "elem1"
|
||||||
(
|
}
|
||||||
)
|
["elem1"]=>
|
||||||
|
object(simplexml_inherited)#%d (3) {
|
||||||
[elem2] => simplexml_inherited Object
|
["@attributes"]=>
|
||||||
(
|
array(1) {
|
||||||
[elem3] => simplexml_inherited Object
|
["attr1"]=>
|
||||||
(
|
string(5) "first"
|
||||||
[elem4] => simplexml_inherited Object
|
}
|
||||||
(
|
["comment"]=>
|
||||||
[test] => simplexml_inherited Object
|
object(simplexml_inherited)#%d (0) {
|
||||||
(
|
}
|
||||||
)
|
["elem2"]=>
|
||||||
|
object(simplexml_inherited)#%d (1) {
|
||||||
)
|
["elem3"]=>
|
||||||
|
object(simplexml_inherited)#%d (1) {
|
||||||
)
|
["elem4"]=>
|
||||||
|
object(simplexml_inherited)#%d (1) {
|
||||||
)
|
["test"]=>
|
||||||
|
object(simplexml_inherited)#%d (0) {
|
||||||
)
|
}
|
||||||
|
}
|
||||||
)
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
===DONE===
|
===DONE===
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and echo/print
|
SimpleXML: echo/print
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php
|
<?php
|
||||||
if (!extension_loaded('simplexml')) print 'skip';
|
if (!extension_loaded('simplexml')) print 'skip';
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and Attribute creation
|
SimpleXML: Attribute creation
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php
|
<?php
|
||||||
if (!extension_loaded('simplexml')) print 'skip';
|
if (!extension_loaded('simplexml')) print 'skip';
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and Split text content
|
SimpleXML: Split text content
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php
|
<?php
|
||||||
if (!extension_loaded('simplexml')) print 'skip';
|
if (!extension_loaded('simplexml')) print 'skip';
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and foreach with children()
|
SimpleXML: foreach with children()
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
--FILE--
|
--FILE--
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML attribute compared to string
|
SimpleXML: Attribute compared to string
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
--FILE--
|
--FILE--
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML element check
|
SimpleXML: Element check
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
--FILE--
|
--FILE--
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
SimpleXML and attributes inside foreach
|
SimpleXML: Attributes inside foreach
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
--FILE--
|
--FILE--
|
||||||
|
@ -12,6 +12,13 @@ EOF;
|
||||||
|
|
||||||
$sxe = simplexml_load_string($xml);
|
$sxe = simplexml_load_string($xml);
|
||||||
|
|
||||||
|
echo "===CONTENT===\n";
|
||||||
|
var_dump($sxe->content);
|
||||||
|
|
||||||
|
echo "===FILE===\n";
|
||||||
|
var_dump($sxe->content->file);
|
||||||
|
|
||||||
|
echo "===FOREACH===\n";
|
||||||
foreach($sxe->content->file as $file)
|
foreach($sxe->content->file as $file)
|
||||||
{
|
{
|
||||||
var_dump($file);
|
var_dump($file);
|
||||||
|
@ -21,18 +28,35 @@ foreach($sxe->content->file as $file)
|
||||||
?>
|
?>
|
||||||
===DONE===
|
===DONE===
|
||||||
--EXPECTF--
|
--EXPECTF--
|
||||||
object(SimpleXMLElement)#%d (0) {
|
===CONTENT===
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["file"]=>
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(1) {
|
||||||
|
["glob"]=>
|
||||||
|
string(11) "slide_*.xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
===FILE===
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(1) {
|
||||||
|
["glob"]=>
|
||||||
|
string(11) "slide_*.xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
===FOREACH===
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(1) {
|
||||||
|
["glob"]=>
|
||||||
|
string(11) "slide_*.xml"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
object(SimpleXMLElement)#%d (1) {
|
object(SimpleXMLElement)#%d (1) {
|
||||||
[0]=>
|
[0]=>
|
||||||
string(11) "slide_*.xml"
|
string(11) "slide_*.xml"
|
||||||
}
|
}
|
||||||
===DONE===
|
===DONE===
|
||||||
--UEXPECTF--
|
|
||||||
object(SimpleXMLElement)#%d (0) {
|
|
||||||
}
|
|
||||||
object(SimpleXMLElement)#%d (1) {
|
|
||||||
[0]=>
|
|
||||||
unicode(11) "slide_*.xml"
|
|
||||||
}
|
|
||||||
===DONE===
|
|
||||||
|
|
|
@ -22,7 +22,12 @@ var_dump($sxe['attr']);
|
||||||
?>
|
?>
|
||||||
===DONE===
|
===DONE===
|
||||||
--EXPECTF--
|
--EXPECTF--
|
||||||
object(SimpleXMLElement)#%d (0) {
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
["@attributes"]=>
|
||||||
|
array(1) {
|
||||||
|
["attr"]=>
|
||||||
|
string(%d) "foo%sbar%sbaz"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
object(SimpleXMLElement)#%d (1) {
|
object(SimpleXMLElement)#%d (1) {
|
||||||
[0]=>
|
[0]=>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
#27010: segfault and node text not displayed when returned from children()
|
Bug #27010: segfault and node text not displayed when returned from children()
|
||||||
--FILE--
|
--FILE--
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
|
|
@ -12,15 +12,24 @@ $root = simplexml_load_string('<?xml version="1.0"?>
|
||||||
</root>
|
</root>
|
||||||
');
|
');
|
||||||
|
|
||||||
echo $root->children('reserved-ns')->child;
|
var_dump($root->children('reserved-ns')->child);
|
||||||
echo "\n";
|
var_dump($root->children('special-ns')->child);
|
||||||
echo $root->children('special-ns')->child;
|
var_dump((string)$root->children('reserved-ns')->child);
|
||||||
foreach ($root->child as $child) {
|
var_dump((string)$root->children('special-ns')->child);
|
||||||
echo "$child\n";
|
var_dump($root->child);
|
||||||
}
|
|
||||||
echo "\n---Done---\n";
|
|
||||||
?>
|
?>
|
||||||
--EXPECT--
|
===DONE===
|
||||||
Hello
|
--EXPECTF--
|
||||||
World
|
object(SimpleXMLElement)#%d (1) {
|
||||||
---Done---
|
[0]=>
|
||||||
|
string(5) "Hello"
|
||||||
|
}
|
||||||
|
object(SimpleXMLElement)#%d (1) {
|
||||||
|
[0]=>
|
||||||
|
string(5) "World"
|
||||||
|
}
|
||||||
|
string(5) "Hello"
|
||||||
|
string(5) "World"
|
||||||
|
object(SimpleXMLElement)#%d (0) {
|
||||||
|
}
|
||||||
|
===DONE===
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--TEST--
|
--TEST--
|
||||||
Interop: simplexml_import_dom
|
SimpleXML [interop]: simplexml_import_dom
|
||||||
--SKIPIF--
|
--SKIPIF--
|
||||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||||
<?php if (!extension_loaded("dom")) print "skip. dom extension not loaded"; ?>
|
<?php if (!extension_loaded("dom")) print "skip. dom extension not loaded"; ?>
|
||||||
|
|
|
@ -1,21 +1,34 @@
|
||||||
<?xml encoding='US-ASCII'?>
|
<?xml encoding='US-ASCII'?>
|
||||||
|
|
||||||
<!ELEMENT sxe elem1, elem 11>
|
<!ELEMENT sxe (elem1+, elem11, elem22*)>
|
||||||
<!ATTLIST sxe id CDATA #implied>
|
<!ATTLIST sxe id CDATA #implied>
|
||||||
|
|
||||||
<!ELEMENT elem1 elem2>
|
<!ELEMENT elem1 elem2*>
|
||||||
<!ATTLIST elem1 attr1 CDATA #required
|
<!ATTLIST elem1 attr1 CDATA #required
|
||||||
attr2 CDATA "default>
|
attr2 CDATA "default>
|
||||||
|
|
||||||
<!ELEMENT elem2 elem3>
|
<!ELEMENT elem2 elem3*>
|
||||||
<!ATTLIST elem2>
|
<!ATTLIST elem2 att25 CDATA #implied
|
||||||
|
att42 CDATA #implied>
|
||||||
|
|
||||||
<!ELEMENT elem3 elem4>
|
<!ELEMENT elem3 elem4*>
|
||||||
<!ATTLIST elem3>
|
<!ATTLIST elem3>
|
||||||
|
|
||||||
<!ELEMENT elem4 EMPTY>
|
<!ELEMENT elem4 EMPTY>
|
||||||
<!ATTLIST elem4>
|
<!ATTLIST elem4>
|
||||||
|
|
||||||
<!ELEMENT elem11 EMPTY>
|
<!ELEMENT elem11 elem111*>
|
||||||
<!ATTLIST elem11>
|
<!ATTLIST elem11>
|
||||||
|
|
||||||
|
<!ELEMNET elem111 elem1111*>
|
||||||
|
<!ATTLIST elem111>
|
||||||
|
|
||||||
|
<!ELEMENT elem1111 EMPTY>
|
||||||
|
<!ATTLIST elem1111>
|
||||||
|
|
||||||
|
<!ELEMENT elem22 elem222*>
|
||||||
|
<!ATTLIST elem22 attr22 CDATA #implied>
|
||||||
|
|
||||||
|
<!ELEMENT elem222 EMPTY>
|
||||||
|
<!ATTLIST elem222>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue