Нужен скрипт обработки xml

PassExcel

Новичок
Разрабатывается пхп модуль для сайта, который будет по xml файлу моделировать различные ситуации.
Структура xml контента такая:
PHP:
<root>
    <function1 [key1=value1,[key2=value2]]>
        <param>1</param>
        <param>2</param>
    </function1>
    <function2 [key1=value1,[key2=value2]]>
        <param>1</param>
        <param>
            <function3 param="foo" />
        </param>
    </function2>
</root>
Вообщем есть три составляющие тега:
1) function - название тега будет совпадать с функцией обработчиков (эти функции уже реализованы)
2) [key1=value1] - атрибуты, в ассоциативный массив в аргументах функции
3) параметры, если много параметров - то могут идти в дочерних тегах <param>, если один - то можно прописать в атрибуте param="foo"


Нужен программист, который собственно напишет парсер xml контента, который будет вызывать функции обработчики.

Пример того, что должно получится в конечном итоге:


PHP:
<?php
function math($arg) {
    print_r($arg);
    /*  Array
        (
            [type] => sum
            [params] => Array
            (
                [0] => 1
                [1] => 2
            )
        )
    */
    if ($arg['type'] == 'sum') {
        return array_sum($arg['params']);
    }
}

$xml = '
<root>
    <math type="sum">
        <param>1</param>
        <param>2</param>
    </math>
</root>
';
$result = proccessXML($xml);
echo($result); // 3
?>
Вот как раз нужна та самая функция proccessXML.
На мой взгляд, задача выполнима часа за 3-4 (пускай начальная цена будет 100$). WMZ,WMR,Epese.
Обсуждаемо.

Для связи - личка.
 

fixxxer

К.О.
Партнер клуба
8 минут )))

PHP:
function processXML($xml) {
    $Xml = simplexml_load_string($xml);
    if (!$Xml) {
        throw new Exception("Failed to load xml");
    }
    $FuncNode = reset($Xml->children());
    if (is_array($FuncNode)) {
        $FuncNode = reset($FuncNode);
    }
    $func_name = $FuncNode->getName();
    if (!$func_name) {
        throw new Exception("Failed to get func name");
    }
    $args = array('params' => array());
    foreach ($FuncNode->attributes() as $k => $v) {
        $args[$k] = strval($v);
    }
    foreach ($FuncNode->param as $Node) {
        $args['params'][] = strval(reset($Node));
    }
    return call_user_func($func_name, $args);
}
с тя 100 вмз. :)
 

PassExcel

Новичок
Хорошее решение, но не поддерживает вложенность) К тому же показывает неверный результат на примере со сложением чисел.
За скрипт взялся флоппик.
 

fixxxer

К.О.
Партнер клуба
Кстати если я правильно понимаю, зачем нужны вложенности, я бы еще добавил что-то типа xslt-шного choose на возвращаемый результат.
 
Сверху