Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > XML как сценарий


Автор: Alix36 16.5.2007, 17:39
Как и какими инструментами сделать такую вещь.
Есть XML файл
такого типа.
Код

<body>
<quest id=1>
<insert sid=345 />
<delite sid=321 />
</quest>
<quest id=2>

<insert sid=3 />
<delite sid=2 />
</quest>
<quest id=3>

<insert sid=35 />
<delite sid=31 />
</quest>
<quest id=4>

<insert sid=5 />
<delite sid=1 />
</quest>
</body>


Вот РНР выполняет скрипт,  и получаем переменную ID 
после этого выбираем node по ID 
Читаем все тэги внутри 
а дальше! Если видим <insert sid=5 /> выполняем function insertdb (sid)
Вот как это сдлать можно?

Автор: Golda 18.5.2007, 11:08
Готовых общих решений не знаю. Но для данной конкретной задачи я бы написала что-нибудь вроде

Код

$xml = new SimpleXMLElement($xmlstr);
foreach ($xml->xpath("/body/quest[@id=$id]/*") as $operator) {
    $func = $operator->getName() . "db";
    $arg = $operator->attributes()->sid;
    call_user_func($func, $arg);
}


Ну и плюс обработка ошибок, конечно

Автор: Alix36 20.5.2007, 10:03
аа.. я в XML пока ориентируюсь плохо, как при таком  скрипте подключать файл?
и что делают вот эти строки
Код

 $func = $operator->getName() . "db";
    $arg = $operator->attributes()->sid;

Автор: Golda 20.5.2007, 15:33
Мой код подразумевал, что XML хранится в строке. Чтобы зачитывать из файла, используйте функцию simplexml_load_file()

Код

$xml = simplexml_load_file('test.xml');


Только, чтобы с Вашим XML SimpleXML мог работать не забудьте заковычить значения аттрибутов.

Далее по коду.
Код

$operator->getName()

возвращает имя узла, на базе которого составляется имя исполняемой функции 
Код

$operator->getName() . "db"


insert -> insertdb


$operator->attributes()->sid возвращает значения аатрибута sid для данного узла $operator. В принципе, это можно сделать и короче

Код

$arg = $operator['sid'];


Автор: Alix36 20.5.2007, 16:10
пасиб

Автор: Alix36 20.5.2007, 20:38
а что будет если у одного из нода будет 2 параметра
<an txt='TXT!' id='2'/>
 и такая функция
Код

function an($sid)
{
$an[]=$sid;//тут ID
$an2[]=????;//тут текст
}

можно какнибудь сделать?

Добавлено через 52 секунды
Код

$arg = $operator->attributes()->sid;

эта строчка смущает получается сколькоб небыло параметров все будет в одной переменной

Автор: Alix36 20.5.2007, 20:53
врубился я туплю

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)