пятница, 25 октября 2013 г.

PHP: работа с XML

XML – один из самых распространенных способов представления данных в интернете, и надо уметь его правильно использовать.

Итак. Что потребуется. Для начала потребуется заготовка в виде простого xml. (test.xml)

<?xml version="1.0" encoding="UTF-8"?>
<test>
 <data val="1">1</data>
 <data val="2">2</data>
 <data val="3">
  <innerdata attr="val">node</innerdata>
 </data>
</test>


Что будем использовать. Использовать будет расширение SimpleXML, доступное в PHP.

Работа с существующим документом


Самое простое, что можно сделать – это загрузить документ. Способов здесь два.

Первый – загрузить документ из файла:
$xml = simplexml_load_file('test.xml');


Второй – распарсить строку, содержащую xml:

$xmlString = file_get_contents("./test.xml");
$xml = new SimpleXMLElement($xmlString);


Данные представляются в виде объектов. Поэтому, чтобы получить доступ, например, к атрибуту “attr” узла innerdata, нам следует написать такой код:

$val = $xml->data[2]->innerdata["attr"];
echo $val."<br/>";


На экран будет выведено:
val


Никто не запрещает использовать foreach

foreach($xml->data as $data)
{
 echo "value = ${data[val]}<br/>";
}

value = 1
value = 2
value = 3

Добавление узлов и атрибутов


$node = $xml->addChild("data","data4 node");
$node->addAttribute("val","4");
print($xml->asXML());

<?xml version="1.0" encoding="UTF-8"?>
<test>
 <data val="1">data1 node</data>
 <data val="2">data2 node</data>
 <data val="3">
  <innerdata attr="val">node</innerdata>
 </data>
<data val="4">data4 node</data></test>

Подводные камни

print_r($xml->data[0]);
SimpleXMLElement Object ( [@attributes] => Array ( [val] => 1 ) [0] => 1 )

Если не хотите, чтобы при работе возникали проблемы, то следует позаботится об этом заранее
print_r((String)$xml->data[0]);
1

Комментариев нет:

Отправить комментарий