ID:               45253
 Comment by:       maito dot gai at gmail dot com
 Reported By:      erudd at netfor dot com
 Status:           Open
 Bug Type:         SimpleXML related
 Operating System: Linux
 PHP Version:      5.2.6
 New Comment:

You can have simplicity or completeness, but you can't have them both
at the same time. SimpleXML offers simplicity through its magic method
($sxml->child) and completeness through addChild().

If you don't want to bother with escaping, use
   $sxml->child1 = 'One & Two';

If you need to bypass escaping, use
   $sxml->addChild('child1', 'One & Two');

Without addChild(), or if addChild() was identical to the magic method,
it would be impossible to use XML entities, eg   would need to be
replaced by the actual character if the document's encoding. And if that
character was not available in that encoding (or charset, rather) then
it would simply be impossible to use.

That's why addChild()'s behaviour is both desirable and needed.


Previous Comments:
------------------------------------------------------------------------

[2008-06-12 21:46:33] erudd at netfor dot com

The XMLWriter extension escapes my input for me as expected instead of
requiring me to escape the input first.

------------------------------------------------------------------------

[2008-06-12 21:31:52] erudd at netfor dot com

Description:
------------
Referencing bug #44458

Where in the documentation does it state that the strings must be
escaped when setting attributes or assigning values to children. I can
find it nowhere in the documentation, nor any examples where you show
that you "must escape text content" before entering it into the
attribute or text content of an element.

Also this behavior is inconsistent behavior as when you fetch the data
it is NOT escaped. So why should I need to escape the data when putting
it in?

This makes simpleXML not so simple as I have to perform extra
"unexpected" work while storing data into the xml document.  Which I do
not have to do with the DOM extension.

Consistency should be high priority in this.. I should expect to
retrieve the same value out that I put in. the SimpleXML class should
handle encoding and decoding data for me so "I" don't have to think
about it.

Reproduce code:
---------------
$sxml=new SimpleXMLElement('<test></test>');
$sxml->addChild('child1','One & Two');
echo "Test 1:".(string)$sxml->child1."\n";

$sxml->addChild('child2','One &amp; Two');
echo "Test 2:".(string)$sxml->child2."\n";

$sxml->addChild('child3');
$sxml->child3 = 'One &amp; Two';
echo "Test 3:".(string)$sxml->child3."\n";


Expected result:
----------------
Test 1:One & Two
Test 2:One &amp; Two
Test 3:One &amp; Two

Actual result:
--------------
Test 1:One 
Test 2:One & Two
Test 3:One & Two



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=45253&edit=1

Reply via email to