Руководство по языку программирования PHP
 

PCRE
 

XML в PHP

Основы simpleXML

SimpleXML довольно простой и в тоже время довольно мощный способ обработки xml данных. Суть simpleXML заключается в том, что весь XML код конвертируется в PHP объект, что довольно сильно облегчает работу с ним. При работе с simpleXML все данные должны быть представлены в UTF-8 кодировке.

Чаще всего конвертация в PHP объект осуществляется при помощи функции simplexml_load_file, ниже представлены примеры работы с ним. Кроме того можно использовать функцию simplexml_load_string, создающую объект PHP из строки XML

Вначале создадим файл xml




Volvo
2001
6000


BMB
2009
17000

Теперь выберем из него все данные


$smpl_xml=simplexml_load_file('auto.xml');
foreach ($smpl_xml->shop as $car){
echo "модель-".$car->model." год выпуска-".$car->year." цена-".$car->price."
";
}

?>

Результат:

модель-Volvo год выпуска-2001 цена-6000
модель-BMB год выпуска-2009 цена-17000


$smpl_xml=simplexml_load_file('auto.xml');
print_r($smpl_xml);

?>

Результат:

SimpleXMLElement Object ( [shop] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 0 ) [model] => Volvo [year] => 2001 [price] => 6000 ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 1 ) [model] => BMB [year] => 2009 [price] => 17000 ) ) )

В следующем примере будет выведена только цена второго автомобиля.


$smpl_xml=simplexml_load_file('auto.xml');
$xml_node = $smpl_xml->shop[1];
echo $xml_node->price;

?>

или


$smpl_xml=simplexml_load_file('auto.xml');
echo ($smpl_xml->shop[1]->price);

?>

Результат:

17000

Для вывода сразу всего xml-кода или отдельного узла используется метод asXML().


$smpl_xml=simplexml_load_file('auto.xml');
echo $smpl_xml->shop[1]->asXML();

?>

Результат:


BMB
2009
17000

simpleXML также поддерживает адресацию с помощью языка XPath. В следующем примере будут отобраны все узлы "year" и возвращен их массив.


$smpl_xml=simplexml_load_file('auto.xml');
$x=$smpl_xml->xpath("/cars/shop/year");
print_r($x);

?>

Результат:

Array ( [0] => SimpleXMLElement Object ( [0] => 2001 ) [1] => SimpleXMLElement Object ( [0] => 2009 ) )

Замена значений элементов осуществляется простым присвоением значения


$smpl_xml=simplexml_load_file('auto.xml');
$xml_node = $smpl_xml->shop[0]->price;
echo $xml_node;
$smpl_xml->shop[0]->price = '1245';
$xml_node1 = $smpl_xml->shop[0]->price;
echo "
".$xml_node1;

?>

Результат:

6000
1245

При замене узлов, которые имеют дочерние узлы, следует быть осторожным, так как все дочерние узлы будут удалены.


$smpl_xml=simplexml_load_file('auto.xml');
$smpl_xml->shop[0] = '1245';
print_r($smpl_xml);

?>

Результат:

SimpleXMLElement Object ( [shop] => Array ( [0] => 1245 [1] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 1 ) [model] => BMB [year] => 2009 [price] => 17000 ) ) )

В двух предыдущих примерах был изменены данные xml находящиеся в оперативной памяти, но они не были записаны на диск. Для перезаписи данных в файле используется функция file_put_contents()


$smpl_xml=simplexml_load_file('auto.xml');
$smpl_xml->shop[0] = '1245';
print_r($smpl_xml);
file_put_contents('auto.xml',$smpl_xml->asXML());

?>

В результате содержимое файла auto.xml примет следующий вид:



1245


BMB
2009
17000

Также допустима интеграция simpleXML и Dom при помощи функции Simplexml_import_dom()


$dom_xml=new domDocument;
$dom_xml->load("auto.xml");
$shops=$dom_xml->getElementsByTagName("shop");
foreach ($shops as $shop){
$simple_shop = simplexml_import_dom($shop);
print $simple_shop->model;
print "
";
}

?>

Результат:

Volvo
BMB

В этом примере будет показано как получить значение атрибутов элементов


$smpl_xml=simplexml_load_file('auto.xml');
foreach ($smpl_xml->shop as $shop){
print($shop['id'].'
');
}

?>

Результат:

0
1

Статьи по теме "Секреты вебмастера"

 

Основы DOM