Разбор XML-тегов с помощью PHP - PullRequest
0 голосов
/ 03 августа 2011

У меня есть XML-документ, который выглядит примерно так:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<smses count="1992">
  <sms protocol="0" address="5558675309" date="1309444177931" type="1" subject="null" body="text message" toa="0" sc_toa="0" service_center="null" read="1" status="-1" locked="0" />
</smses>

Я хочу извлечь адрес, дату и тело для каждой строки <sms>, и там около 8000 строк.Я не уверен, что лучший способ сделать это, поэтому, если кто-нибудь и укажет мне правильное направление, я буду признателен.На самом деле не нужен конкретный код, просто направление.Я в тупике.

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Вы можете использовать расширение PHP SimpleXML для анализа этого.См. «Основное использование SimpleXML» для ознакомления.

Вот некоторый код для начала работы (array_map требует PHP> = 5.3):

$smses = new SimpleXMLElement($xml_str);
$smses_parsed = array_map(function($sms_el) {
        return array('address' => (string)$sms_el['address'],
            'date' => (int)$sms_el['date'],
            'body' => (string)$sms_el['body']);
    }, $smses);

print_r($smses_parsed[0]); /* => array("address" => "5558675309",
                                       "date" => 1309444177931,
                                       "body" => "text message") */

Одно замечание: SimpleXML - строгий парсер.Если ваш XML несколько искажен, вам, вероятно, повезет больше с DOMDocument.(Однако я не ожидаю, что этот случай будет вероятен здесь, учитывая простую структуру документа, которую вы разместили.)

2 голосов
/ 03 августа 2011
$dom = new DOMDOcument();

// Load your XML as a string
$dom->loadXML($s);

// Create new XPath object
$xpath = new DOMXpath($dom);

// Query for Account elments inside NewDataSet elemts inside string elements
$result = $xpath->query("/smses");

// Note there are many ways to query XPath using this syntax

// Iterate over the results
foreach($result as $node)
{
    // Obtains item for sms tags here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...