. php xml – системная ошибка при парсинге документа. | Makarou.com - когда сайты превращаются в бизнес

php xml – системная ошибка при парсинге документа.

php xmlВсем привет! Сегодня я хочу Вам рассказать, как бороться может не со столь популярной, ошибкой парсинга в php xml документе. Но если честно, то ошибка очень интересная, решал я ее по просьбе заказчика с фриланса, и вот решил рассказать вам, чтобы если что, то знали как бороться.

В какой стороне ошибка я точно сказать немогу, это может быть, как и сторона php так и его модуля simplexml по работе с xml php. Ошибка заключается в том, что если в xml документе есть объекты, названия которых содержат «-» (знак тире), то из php обратится к ним не получится, и даже ошибка не высветится. Лучше покажу вам xml документ, так будет наглядней. :)

<messages>
<message>
<transaction-id>768765324</transaction-id>
<time>19-11-2004 12:34:34.123</time>
<keyword>KEYWORD</keyword>
<provider>bee</provider>
<short-number>8881</short-number>
<phone>79161234567</phone>
<text>PRIVET VSEM!</text>
<money>1.36</money>
<region-id>1</region-id>
</message>
</messages>

Как видим из кода выше, объекты содержат тире, например: transaction-id, short-number, region-id. Кстати говоря, этот xml какой-то платежной системы или биллинга. Руки бы оторвал за такое. :)

Теперь, когда нам известна ошибка можно перейти к решению проблемы, а именно, использовать xpath при выборке данных + проявить смекалку. Следующий код это демонстрирует.

$messages =  simplexml_load_file('transactions.xml');
$transaction='transaction-id';
$short='short-number';
$region='region-id';

foreach($messages->xpath('/messages/message') as $item){
echo "<p>". $item->time. "</p>";
echo "<p>". $item->$transaction."</p>";
echo "<p>". $item->text. "</p>";
echo "<p>". $item->keyword. "</p>";
echo "<p>". $item->provider. "</p>";
echo "<p>". $item->$short. "</p>";
echo "<p>". $item->phone. "</p>";
echo "<p>". $item->money. "</p>";
echo "<p>". $item->$region. "</p>";
}

Как видим из кода, мы поместили названия проблемных объектов в переменные и потом подставляем название переменных в нужном месте. В принципе, ничего сложного нет и можно всегда пользоваться таким способом, но просто, зачем делают такую структуру документа, непонятно. :)

На этом все. С 5 июля я в отпуске и меня не будет 3 недели, так что посты продолжу писать по приезду.

php

Понравился пост? добавь его к себе в закладки:
Хочешь быть всегда в курсе обновлений блога? подписывайся через:
фото проституток новосибирска