Re: [PHP] LoadXML trouble
If i use your script like this: $xml = '?xml version=1.0? response ticketID1197027955_8310/ticketID statusOK/status errCode200/errCode errMsg/errMsg /response'; $obj = new DOMDocument(); $obj-loadXML( $xml ); echo print_r( $obj, true ); echo $obj-saveXML() . PHP_EOL; The first statement writes: DOMDocument Object ( ) The second: ?xml version=1.0? response ticketID1197027955_8310/ticketID statusOK/status errCode200/errCode errMsg/ /response It's just the xml is not properly stored in loadXML method... but the string must be inside due to saveXML returns the proper value. Nathan Nobbe escribió: On Dec 10, 2007 12:08 PM, Dani Castaños [EMAIL PROTECTED] mailto:[EMAIL PROTECTED] wrote: Yep, it works when i do saveXML, but not on loadXML step... did the loadXML() method work in the test script i sent over in my last post? if it does then something else is going on when loadXML() is called in the context of your application. The thing is... i'm trying to do something like this: $request = $_POST['xml']; $logger-debug( 'New ticket request' ); /** * Parse XML request to obtain values */ $xml = new DOMDocument(); //$xml-validateOnParse = true; $xml-loadXML( $request ); you should always sanitize input. at the very least you should be running $_POST['xml'] through a call to trim() before handing it to the DOMDocument instance. $request = trim($_POST['xml']); $xml = new DOMDocument(); $xml-loadXML($request); i suspect there is some garbage in or around the string contained in $_POST['xml'] that the DomDocument instance doesnt like, therefore its not behaving the way youd anticipate. for example if you modify the script i sent over last time by putting some spaces in between the xml declaration and the opening tag of the envelope (response) you should see the following error (or something similar [depending on the value of error_reporting]) Warning: DOMDocument::loadXML(): XML declaration allowed only at the start of the document in Entity, line: 3 in /home/nathan/testDom.php on line 19 which consequently leads to ?xml version=1.0? when invoking echo $domDoc-saveXML() . PHP_EOL; rather than ?xml version= 1.0? response ticketID1197026188_ec76/ticketID statusKO/status errCode500/errCode errMsgInternal Server Error/errMsg /response which is what you would expect. -nathan -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] LoadXML trouble
On Dec 11, 2007 3:52 AM, Dani Castaños [EMAIL PROTECTED] wrote: If i use your script like this: $xml = '?xml version=1.0? response ticketID1197027955_8310/ticketID statusOK/status errCode200/errCode errMsg/errMsg /response'; $obj = new DOMDocument(); $obj-loadXML( $xml ); echo print_r( $obj, true ); echo $obj-saveXML() . PHP_EOL; The first statement writes: DOMDocument Object ( ) The second: ?xml version=1.0? response ticketID1197027955_8310/ticketID statusOK/status errCode200/errCode errMsg/ /response It's just the xml is not properly stored in loadXML method... but the string must be inside due to saveXML returns the proper value. that is expected behavior. some of the internal classes dont define any member variables that the php language has access to. obviously they are storing data internally, said variables just arent accessible as member variables of the class thats being defined. you can look at the structure of a class in one line with: Reflection::export(new ReflectionClass('DomDocument')); -nathan
Re: [PHP] LoadXML trouble
that is expected behavior. some of the internal classes dont define any member variables that the php language has access to. obviously they are storing data internally, said variables just arent accessible as member variables of the class thats being defined. Ok! Thank you for this info... But then... Why can i do this in Windows: $xml-getElementsByTagName( 'ticketID' )-item( 0 )-nodeValue; and not in Linux? -- Xml example: ?xml version=1.0? response ticketID1197027955_8310/ticketID statusOK/status errCode200/errCode errMsg/errMsg /response -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] LoadXML trouble
Hi Nathan! Thank you for all your help! Problem has been fixed... The thing is, when request is sent, there is a little difference in what i get... I get ?xml version=\1.0\ and so on... These backslashes make the loadXML not load data properly... I've put an str_replace and the problem has been solved Again... Thank you very much! -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] LoadXML trouble
Dani Castaños wrote: Hi Nathan! Thank you for all your help! Problem has been fixed... The thing is, when request is sent, there is a little difference in what i get... I get ?xml version=\1.0\ and so on... These backslashes make the loadXML not load data properly... I've put an str_replace and the problem has been solved ah, that will be this: http://php.net/manual/en/ref.info.php#ini.magic-quotes-gpc you have just learned to carefully study the differences between dev and production php.ini settings (e.g. via phpinfo()) when you run into these kind of problems :-) Again... Thank you very much! -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] LoadXML trouble
On Dec 10, 2007 4:48 AM, Dani Castaños [EMAIL PROTECTED] wrote: Hi list! I have a problem with DOMDocument loadXML method. I used Windows to develop my applications, and nothing happens on it when i do something like $xml = new DOMDocument(); $xml-loadXML( $request ); Obviously, request is not empty... have you checked the contents of $request on the production machine prior to the invocation of loadXML() ? But when I have upload this code to production machine ( which runs under Debian ) it doesn't works properly, The DOMDocument Object is empty... are the systems running the same major version of php; and have you verified the linux system has DOM support? -nathan
Re: [PHP] LoadXML trouble
I've checked $request previously and is not empty... it has something like: ?xml version=1.0? response ticketID1197026188_ec76/ticketID statusKO/status errCode500/errCode errMsgInternal Server Error/errMsg /response The curious thing is that I've built this xml string with DOMDocument in my request... Then I suppose my Linux system has DOM support, Nathan Nobbe escribió: On Dec 10, 2007 4:48 AM, Dani Castaños [EMAIL PROTECTED] mailto:[EMAIL PROTECTED] wrote: Hi list! I have a problem with DOMDocument loadXML method. I used Windows to develop my applications, and nothing happens on it when i do something like $xml = new DOMDocument(); $xml-loadXML( $request ); Obviously, request is not empty... have you checked the contents of $request on the production machine prior to the invocation of loadXML() ? But when I have upload this code to production machine ( which runs under Debian ) it doesn't works properly, The DOMDocument Object is empty... are the systems running the same major version of php; and have you verified the linux system has DOM support? -nathan -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] LoadXML trouble
On Dec 10, 2007 11:40 AM, Dani Castaños [EMAIL PROTECTED] wrote: I've checked $request previously and is not empty... it has something like: ?xml version=1.0? response ticketID1197026188_ec76/ticketID statusKO/status errCode500/errCode errMsgInternal Server Error/errMsg /response have you been testing this in the context of your application, or have you also tried a focused test script? i would try something trivial, like: ?php $xml = XML ?xml version=1.0? response ticketID1197026188_ec76/ticketID statusKO/status errCode500/errCode errMsgInternal Server Error/errMsg /response XML; $domDoc = new DOMDocument(); $domDoc-loadXML($xml); echo $domDoc-saveXML() . PHP_EOL; ? just to ensure the DOM extension is available and working as expected. -nathan
Re: [PHP] LoadXML trouble
Yep, it works when i do saveXML, but not on loadXML step... The thing is... i'm trying to do something like this: $request = $_POST['xml']; $logger-debug( 'New ticket request' ); /** * Parse XML request to obtain values */ $xml = new DOMDocument(); //$xml-validateOnParse = true; $xml-loadXML( $request ); $customer_id = $xml-getElementsByTagName( 'customerID' )-item( 0 )-nodeValue; $app_name = $xml-getElementsByTagName( 'appName' )-item( 0 )-nodeValue; $ticket_type = $xml-getElementsByTagName( 'ticketType' )-item( 0 )-nodeValue; $ticket_action = $xml-getElementsByTagName( 'ticketAction' )-item( 0 )-nodeValue; $ticket_params = $xml-getElementsByTagName( 'parameters' )-item( 0 )-childNodes; ... Nathan Nobbe escribió: On Dec 10, 2007 11:40 AM, Dani Castaños [EMAIL PROTECTED] mailto:[EMAIL PROTECTED] wrote: I've checked $request previously and is not empty... it has something like: ?xml version=1.0? response ticketID1197026188_ec76/ticketID statusKO/status errCode500/errCode errMsgInternal Server Error/errMsg /response have you been testing this in the context of your application, or have you also tried a focused test script? i would try something trivial, like: ?php $xml = XML ?xml version=1.0? response ticketID1197026188_ec76/ticketID statusKO/status errCode500/errCode errMsgInternal Server Error/errMsg /response XML; $domDoc = new DOMDocument(); $domDoc-loadXML($xml); echo $domDoc-saveXML() . PHP_EOL; ? just to ensure the DOM extension is available and working as expected. -nathan -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] LoadXML trouble
On Dec 10, 2007 12:08 PM, Dani Castaños [EMAIL PROTECTED] wrote: Yep, it works when i do saveXML, but not on loadXML step... did the loadXML() method work in the test script i sent over in my last post? if it does then something else is going on when loadXML() is called in the context of your application. The thing is... i'm trying to do something like this: $request = $_POST['xml']; $logger-debug( 'New ticket request' ); /** * Parse XML request to obtain values */ $xml = new DOMDocument(); //$xml-validateOnParse = true; $xml-loadXML( $request ); you should always sanitize input. at the very least you should be running $_POST['xml'] through a call to trim() before handing it to the DOMDocument instance. $request = trim($_POST['xml']); $xml = new DOMDocument(); $xml-loadXML($request); i suspect there is some garbage in or around the string contained in $_POST['xml'] that the DomDocument instance doesnt like, therefore its not behaving the way youd anticipate. for example if you modify the script i sent over last time by putting some spaces in between the xml declaration and the opening tag of the envelope (response) you should see the following error (or something similar [depending on the value of error_reporting]) Warning: DOMDocument::loadXML(): XML declaration allowed only at the start of the document in Entity, line: 3 in /home/nathan/testDom.php on line 19 which consequently leads to ?xml version=1.0? when invoking echo $domDoc-saveXML() . PHP_EOL; rather than ?xml version=1.0? response ticketID1197026188_ec76/ticketID statusKO/status errCode500/errCode errMsgInternal Server Error/errMsg /response which is what you would expect. -nathan
RE: [PHP] LoadXML trouble
first, create dealxml.php with ansi charset : ?php $r = XML ?xml version=1.0? response customerIDked/customerID appNametickcenter/appName ticketTypetrain/ticketType ticketActionback/ticketAction ticketID1197026188_ec76/ticketID statusKO/status errCode500/errCode errMsgInternal Server Error/errMsg /response XML; $xml = new DOMDocument(); //$xml-validateOnParse = true; $xml-loadXML( $r ); $customer_id = $xml-getElementsByTagName( 'customerID' )-item( 0 )-nodeValue; $app_name = $xml-getElementsByTagName( 'appName' )-item( 0 )-nodeValue; $ticket_type = $xml-getElementsByTagName( 'ticketType' )-item( 0 )-nodeValue; $ticket_action = $xml-getElementsByTagName( 'ticketAction' )-item( 0 )-nodeValue; $ticket_params = $xml-getElementsByTagName( 'parameters' )-item( 0 )-childNodes; echo $customer_id br; echo $app_name br; echo $ticket_typed br; echo $ticket_action br; echo $ticket_params br; ? IE output : Warning: DOMDocument::loadXML() [function.loadXML]: Input is not proper UTF-8, indicate encoding ! in Entity, line: 4 in W:\www\test\dealxml.php on line 26 next , saved the dealxml.php as UTF-8 charset, then it works well. I think that the xml resource should be encoded by utf-8 charset, right or wrong ? My OS : win2000 , simplified chinese. Dose the OS blight DOMDocument ? -Original Message- From: Nathan Nobbe [mailto:[EMAIL PROTECTED] Sent: Tuesday, December 11, 2007 1:25 AM To: Dani Castaños Cc: php-general@lists.php.net Subject: Re: [PHP] LoadXML trouble On Dec 10, 2007 12:08 PM, Dani Castaños [EMAIL PROTECTED] wrote: Yep, it works when i do saveXML, but not on loadXML step... did the loadXML() method work in the test script i sent over in my last post? if it does then something else is going on when loadXML() is called in the context of your application. The thing is... i'm trying to do something like this: $request = $_POST['xml']; $logger-debug( 'New ticket request' ); /** * Parse XML request to obtain values */ $xml = new DOMDocument(); //$xml-validateOnParse = true; $xml-loadXML( $request ); you should always sanitize input. at the very least you should be running $_POST['xml'] through a call to trim() before handing it to the DOMDocument instance. $request = trim($_POST['xml']); $xml = new DOMDocument(); $xml-loadXML($request); i suspect there is some garbage in or around the string contained in $_POST['xml'] that the DomDocument instance doesnt like, therefore its not behaving the way youd anticipate. for example if you modify the script i sent over last time by putting some spaces in between the xml declaration and the opening tag of the envelope (response) you should see the following error (or something similar [depending on the value of error_reporting]) Warning: DOMDocument::loadXML(): XML declaration allowed only at the start of the document in Entity, line: 3 in /home/nathan/testDom.php on line 19 which consequently leads to ?xml version=1.0? when invoking echo $domDoc-saveXML() . PHP_EOL; rather than ?xml version=1.0? response ticketID1197026188_ec76/ticketID statusKO/status errCode500/errCode errMsgInternal Server Error/errMsg /response which is what you would expect. -nathan -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php