Обновлен до php 5.3.10, и simpleXMLelement не работает - PullRequest
2 голосов
/ 28 марта 2012

Этот код работал, и когда мы обновились до php 5.3.10, он перестал работать и начал выдавать некоторые действительно странные ошибки.

Оригинальный XML-файл проверяется на w3c.org без ошибок, однако я отредактировал сайт для краткости и безопасности.

XML (отредактировано для краткости, но в строке 1 выдается ошибка):

<AmberAlertDirective  
xmlns="http://www.hidden.com/AmberAlert"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.hidden.com/en_US/AmberAlert.xsd">
  <Directive>New</Directive>
  <AmberAlertId>9969</AmberAlertId>
  <MessageTimestamp>2012-03-27T00:35:11</MessageTimestamp>
  <AmberAlert>
    <Target>
      <State Code="OH">
      </State>
    </Target>
  </AmberAlert>
</AmberAlertDirective>

Ошибки php из error_log:

PHP Warning:  SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: Entity: line 2: parser error : AttValue: &quot; or ' expected in /aa.php on line 125
PHP Warning:  SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: xmlns=\&quot;http://www.missingkids.com/amber/NCMECAmberAlert\&quot;   in /aa.php on line 125
PHP Warning:  SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]:       ^ in /aa.php on line 125
PHP Warning:  SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: Entity: line 2: parser error : attributes construct error in /aa.php on line 125
PHP Warning:  SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: xmlns=\&quot;http://www.missingkids.com/amber/NCMECAmberAlert\&quot;   in /aa.php on line 125
PHP Warning:  SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]:       ^ in /aa.php on line 125
PHP Warning:  SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: Entity: line 2: parser error : Couldn't find end of Start Tag AmberAlertDirective line 1 in /aa.php on line 125
PHP Warning:  SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: xmlns=\&quot;http://www.missingkids.com/amber/NCMECAmberAlert\&quot;   in /aa.php on line 125
PHP Warning:  SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]:       ^ in /aa.php on line 125
PHP Warning:  SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: Entity: line 2: parser error : Extra content at the end of the document in /aa.php on line 125
PHP Warning:  SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]: xmlns=\&quot;http://www.missingkids.com/amber/NCMECAmberAlert\&quot;   in /aa.php on line 125
PHP Warning:  SimpleXMLElement::__construct() [<a href='simplexmlelement.--construct'>simplexmlelement.--construct</a>]:       ^ in /aa.php on line 125
PHP Fatal error:  Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /aa.php:125
Stack trace:
#0 /aa.php(125): SimpleXMLElement->__construct('<AmberAlertDire...')
#1 /AAServlet.php(64): processAmber('<AmberAlertDire...')
#2 {main}
  thrown in /aa.php on line 125

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Попробуйте отключить magic_quotes или поместить ваш XML-контент через stripslashes перед переходом на SimpleXML.

1 голос
/ 28 марта 2012

Из-за ваших ошибок я считаю, что ваша проблема не в том, чтобы зарегистрировать ваши пространства имен. А именно ваше пространство имен по умолчанию. Есть несколько способов сделать это, это зависит только от того, как вы обрабатываете данные.

XPATH:

$xml->registerXPathNamespace('default', 'http://www.hidden.com/AmberAlert');

дети ():

$xml->children('http://www.hidden.com/AmberAlert');
...