парсинг и написание xml с PHP - PullRequest
0 голосов
/ 25 февраля 2012

Я пытаюсь проанализировать XML-документ в php, что несколько сложно, потому что XML состоит из объектов внутри объектов.Вот xml:

<Bars>
<Bar>
<BarName>the bar name</BarName>
<bar_id>0</bar_id>
<Bartenders>
<Bartender><fname>a first name</fname><lname>a last name</lname><imageURL>an image url</imageURL><shift>2</shift></Bartender>
</Bartenders>
<Events>
<Event><EventName> event</EventName><date>08/10/1989</date></Event>
</Events>
<Specials>
<Special> Special 1</Special><Special> Special 2</Special>
</Specials>
</Bar>

Очевидно, что есть несколько таких 'bar' объектов в элементе bars xml.Я пытаюсь понять, как это сделать, - проанализировать этот файл, сохранить его содержимое в массиве, обновить массив с помощью пользовательского ввода из приложения iOS и, наконец, записать XML обратно на страницу.Проблема, с которой я столкнулся, заключается в том, как я могу сохранить несколько объектов «бармен», «событие» и «специальные» в массивы для соответствующей панели?Я должен буду создать массив bartender в массиве foreach правильно?Нужно ли создавать барный класс, в котором размещаются бармены, события и специальные массивы?

На данный момент приведен фрагмент моего php-кода:

$bars = $doc->getElementsByTagName("Bar");
foreach($bars as $bar)
{
    $barNames = $bar->getElementsByTagName("BarName");
    $barName = $barNames->item(0)->nodeValue;
    array_push($barNameArray, $barName);


    echo "<b>barName:$barName</b><br>";
}

$barsArray = array();

//make any updates to the arrays as needed

for($i = 0; $i < count($barNameArray); $i++) // write an array of bar objects from the arrays created above

Как видите, японять это довольно легко, если это только один тип элемента на бар.Я ничего не могу жестко закодировать, потому что я не буду знать, сколько барменов, баров, спецпредложений и т. Д. Публикуется в данное время ... Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 25 февраля 2012

Попробуйте эту функцию, чтобы получить ассоциативный массив вашего XML.

function objectsIntoArray($arrObjData, $arrSkipIndices = array())
{
    $arrData = array();

    // if input is object, convert into array
    if (is_object($arrObjData)) {
        $arrObjData = get_object_vars($arrObjData);
    }

    if (is_array($arrObjData)) {
        foreach ($arrObjData as $index => $value) {
            if (is_object($value) || is_array($value)) {
                $value = objectsIntoArray($value, $arrSkipIndices); // recursive call
            }
            if (in_array($index, $arrSkipIndices)) {
                continue;
            }
            $arrData[$index] = $value;
        }
    }
    return $arrData;
}

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

$xmlUrl = "nameit.xml"; // XML 
$xmlStr = file_get_contents($xmlUrl);
$xmlObj = simplexml_load_string($xmlStr);
$arrXml = objectsIntoArray($xmlObj);
print_r($arrXml);
...