28.12.2012 12:17:01
Пример использования функций simplexml_load_file и simplexml_load_string. Также работа с @attributes

Использование simplexml_load_file

1
2
3
4
5
6
7
8
$oXml = simplexml_load_file($myPath.'/yandex.xml');

foreach($oXml->shop->offers->offer as $oOffer)
{
  echo '<pre>';
    print_r($oOffer);
  echo '</pre>';
}

А вот переделанный пример из официальной документации к simplexml_load_string, пусть будет до кучи:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$string = <<<XML
<?xml version='1.0'?>
<document>
    <title>Forty What?</title>
    <from>Joe</from>
    <to>Jane</to>
    <body>
        <sub>Test 1</sub>
        <sub>Test 2</sub>
        <sub>Test 3</sub>
    </body>
</document>
XML;

$oXml = simplexml_load_string($string);

foreach($oXml->body->sub as $oSub)
{
  echo '<pre>';
    print_r($oSub);
  echo '</pre>';
}

 

При работе с этим методом столкнулся с тонкостью, парсер вернул объект:

1
2
3
4
5
6
7
8
9
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [id] => 1
        )

    [0] => двери
)

Естественно варианты:

1
$oXML->@attributes;

1
2
$sKey = '@attributes';
$oXML->$sKey;

- не сработали.

Верный способ:

1
2
3
4
5
6
$aAttr = $oXML->attributes();

echo $aAttr['id'].'<br>';
echo (string) $oXML.'<br>'; // $oXML[0]

$aTmp["$id"] = (string) $oXML;

Существует проблема с нодами в именах которых присутствует двоеточие. Подробнее в MJ 534


Тэги: PHP

Яндекс.Метрика