GET_NODE(sxe, node);
node = php_sxe_get_first_node(sxe, node TSRMLS_CC);
-
- if (node) {
- node = node->children;
-
+ if (node && sxe->iter.type != SXE_ITER_ATTRLIST) {
+ if (node->type == XML_ATTRIBUTE_NODE) {
+ MAKE_STD_ZVAL(value);
+ ZVAL_STRING(value, xmlNodeListGetString(node->doc, node->children, 1), 1);
+ zend_hash_next_index_insert(rv, &value, sizeof(zval *), NULL);
+ node = NULL;
+ } else {
+ node = node->children;
+ }
while (node) {
if (node->children != NULL || node->prev != NULL || node->next != NULL) {
SKIP_TEXT(node);
--- /dev/null
+--TEST--
+SimpleXML: Attributes with entities
+--SKIPIF--
+<?php if (!extension_loaded("simplexml")) print "skip"; ?>
+--FILE--
+<?php
+
+$xml =<<<EOF
+<?xml version='1.0'?>
+<!DOCTYPE talks SYSTEM "nbsp.dtd" [
+<!ELEMENT root EMPTY>
+<!ATTLIST root attr1 CDATA #IMPLIED>
+<!ENTITY nbsp "&#x00A0;">
+]>
+<root attr='foo bar baz'></root>
+EOF;
+
+$sxe = simplexml_load_string($xml);
+
+var_dump($sxe);
+var_dump($sxe['attr']);
+?>
+===DONE===
+--EXPECTF--
+object(SimpleXMLElement)#%d (0) {
+}
+object(SimpleXMLElement)#%d (1) {
+ [0]=>
+ string(%d) "foo%sbar%sbaz"
+}
+===DONE===