Итак. Что потребуется. Для начала потребуется заготовка в виде простого 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