|
|
|
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
|
Статьи по теме "Секреты вебмастера"
|
|
|