Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Парсет XML для PHP (http://forum.oszone.net/showthread.php?t=59324)

Irlon 13-01-2006 13:25 391931

Парсет XML для PHP
 
не люблю я xml всеми фибрами души, но нужно принимать экспортируемый xml файл в PHP.
Нашёл в PHP функцию xmlfree($XML_STR) – это то что мне нужно, создаёт ассоциативным массив с элементами. Но php ругается что нет такой функции, и в мануале по PHP даже описания её нету. Может существует аналог?

Vlad Drakula 13-01-2006 13:31 391932

Irlon
PHP код:

$simple "<para><note>simple note</note></para>";
$p xml_parser_create();
xml_parse_into_struct($p$simple$vals$index);
xml_parser_free($p);
echo 
"Index array\n";
print_r($index);
echo 
"\nVals array\n";
print_r($vals); 

выдает:

Цитата:


Index array
Array
(
[PARA] => Array
(
[0] => 0
[1] => 2
)

[NOTE] => Array
(
[0] => 1
)

)

Vals array
Array
(
[0] => Array
(
[tag] => PARA
[type] => open
[level] => 1
)

[1] => Array
(
[tag] => NOTE
[type] => complete
[level] => 2
[value] => simple note
)

[2] => Array
(
[tag] => PARA
[type] => close
[level] => 1
)

)

а вообще зря вы не любите XML это очень хороший формат данных если им уметь правильно пользоваться!

Irlon 13-01-2006 13:40 391935

Спасибо! оперативно. Всё работает

Plutonium 239 31-05-2006 16:07 444661

Мне вот тут надо из xml файла погоду выбить,
HTML код:

<MMWEATHER>
 <REPORT type="frc3">
 <TOWN longitude="83" latitude="55" sname="%CD%EE%E2%EE%F1%E8%E1%E8%F0%F1%EA" index="29634">
 <FORECAST weekday="4" predict="18" tod="3" hour="18" year="2006" month="5" day="31">
  <PHENOMENA spower="0" rpower="0" precipitation="10" cloudiness="0" />
  <PRESSURE min="747" max="749" />
  <TEMPERATURE min="18" max="20" />
  <WIND direction="2" max="5" min="2" />
  <RELWET min="18" max="23" />
  <HEAT max="20" min="18" />
  </FORECAST>
 <FORECAST weekday="5" predict="24" tod="0" hour="0" year="2006" month="6" day="1">
  <PHENOMENA spower="0" rpower="0" precipitation="10" cloudiness="1" />
  <PRESSURE min="746" max="748" />
  <TEMPERATURE min="9" max="11" />
  <WIND direction="3" max="5" min="2" />
  <RELWET min="36" max="41" />
  <HEAT max="11" min="9" />
  </FORECAST>
 <FORECAST weekday="5" predict="30" tod="1" hour="6" year="2006" month="6" day="1">
  <PHENOMENA spower="0" rpower="0" precipitation="10" cloudiness="1" />
  <PRESSURE min="746" max="748" />
  <TEMPERATURE min="10" max="12" />
  <WIND direction="2" max="3" min="1" />
  <RELWET min="38" max="43" />
  <HEAT max="12" min="10" />
  </FORECAST>
 <FORECAST weekday="5" predict="36" tod="2" hour="12" year="2006" month="6" day="1">
  <PHENOMENA spower="0" rpower="0" precipitation="10" cloudiness="0" />
  <PRESSURE min="746" max="748" />
  <TEMPERATURE min="22" max="24" />
  <WIND direction="3" max="5" min="2" />
  <RELWET min="14" max="19" />
  <HEAT max="25" min="23" />
  </FORECAST>
  </TOWN>
  </REPORT>
  </MMWEATHER>

Цитата:

Описание формата
TOWN информация о пункте прогнозирования:
index уникальный пятизначный код города
sname закодированное название города
latitude широта в целых градусах
longitude долгота в целых градусах
FORECAST информация о сроке прогнозирования:
day, month, year дата, на которую составлен прогноз в данном блоке
hour местное время, на которое составлен прогноз
tod время суток, для которого составлен прогноз: 0 - ночь 1 - утро, 2 - день, 3 - вечер
weekday день недели, 1 - воскресенье, 2 - понедельник, и т.д.
predict заблаговременность прогноза в часах
PHENOMENA атмосферные явления:
cloudiness облачность по градациям: 0 - ясно, 1- малооблачно, 2 - облачно, 3 - пасмурно
precipitation тип осадков: 4 - дождь, 5 - ливень, 6,7 – снег, 8 - гроза, 9 - нет данных, 10 - без осадков
rpower интенсивность осадков, если они есть. 0 - возможен дождь/снег, 1 - дождь/снег
spower вероятность грозы, если прогнозируется: 0 - возможна гроза, 1 - гроза
PRESSURE атмосферное давление, в мм.рт.ст.
TEMPERATURE температура воздуха, в градусах Цельсия
WIND приземный ветер
min, max минимальное и максимальное значения средней скорости ветра, без порывов
direction направление ветра в румбах, 0 - северный, 1 - северо-восточный, и т.д.
RELWET относительная влажность воздуха, в %
HEAT комфорт - температура воздуха по ощущению одетого по сезону человека, выходящего на улицу
Вот таким макаром я его открываю
PHP код:

$f fopen('pogoda.xml''r');
$simple fread($f10000);
$p xml_parser_create();
xml_parse_into_struct($p$simple$vals$index);
xml_parser_free($p); 

а вот как из этих массивов вытащить информацию ума не приложу:wacko:

Vlad Drakula 31-05-2006 16:27 444670

Plutonium 239

читал: http://forum.oszone.net/thread-54773.html ???
не подходит???

benya 31-05-2006 17:27 444701

Irlon,
Цитата:

не люблю я xml всеми фибрами души
И верно ведь говорит Vlad Drakula зря не любите. Я только им и пользуюсь. Иногда небьльшие по обьему промежуточные данные скидываю в этот формат. И потом очень легко они оттуда и берутся.
Vlad Drakula,
Цитата:

читал: http://forum.oszone.net/thread-54773.html ???
не подходит???
Можно и просто парсером выдрать.

Vlad Drakula 31-05-2006 17:44 444709

benya
Цитата:

Можно и просто парсером выдрать.
можно... но вы веть прекрасно знаете что на много проще натравить на это дело XSL... и получить к примеру готовый HTML...
а главное 100% развезка PHP кода и представления... если нужно изменить внешний вид меняем XSL шаблон... если изменился входной формат XML просто меняем XSL шаблон...

Irlon
Цитата:

не люблю я xml всеми фибрами души
и зря!!! мой бывший коллега тоже не очень то любил... XSL... в итоге писал много всякой пакши на JS... а мне потом все это пришлось расхлебывать....

Plutonium 239 31-05-2006 18:51 444736

Vlad Drakula
а можно просто и понятно объяснить на моем примере? а то это все слишком сложно для меня...

Prisoner 31-05-2006 19:24 444744

Plutonium 239, в мануале второй пример, имхо, как раз по твоей задачке. Погляди сам. Там идет "ручной" обход ввиду того, что xml_parse_into_struct возвращает данные не в DOM представлении, а как бы ссылочно.

benya 31-05-2006 20:26 444768

Vlad Drakula,
Цитата:

можно... но вы веть прекрасно знаете что на много проще натравить на это дело XSL... и получить к примеру готовый HTML...
а главное 100% развезка PHP кода и представления... если нужно изменить внешний вид меняем XSL шаблон... если изменился входной формат XML просто меняем XSL шаблон...
Смотря для какого случая легче. Для сайта который и написан, и оптимизирован под XML + XSLT действительно легче, ну и удобнее наверное. Добавить там самый минимум.
А так придется еще и движок для XSLT преобразования куда-то лепить со всеми вытекающими отсюда последствиями...

Vlad Drakula 31-05-2006 22:02 444811

benya
Цитата:

Смотря для какого случая легче. Для сайта который и написан, и оптимизирован под XML + XSLT действительно легче, ну и удобнее наверное. Добавить там самый минимум.
А так придется еще и движок для XSLT преобразования куда-то лепить со всеми вытекающими отсюда последствиями...
у меня сейчас есть коллега... он тоже так думал...

задача была похожая (индегрировать ленту новостей в сайт...) зделали без XSL...
потом дизайнер подправил дизайн + сменили формат...
в итоге за 15 минут переписали все снуля с использованием XSL...

Plutonium 239 01-06-2006 04:48 444910

Prisoner
Цитата:

в мануале второй пример, имхо, как раз по твоей задачке.
я этот пример уже видел и ничерта в нем не понял, может есть какой другой способ обработать этот xml

vadimiron 01-06-2006 12:26 445014

а что для парсинга в ПХП никто не использует SimpleXML???

Вот и до меня дошла данная технология.............

Раз уж об ПХП и ИксЭмЭль зашла речь, то у меня вопрос: как лучше всего передавать параметры в XSL ??
Моя первая мысль (которая сейчас работает), создавать в генерируемом XML в руте ещё набор элементов params, потом из этих элементов создавать глобальные переменные и применять, где надо.
Задача конкретно: Я генерирую список объектов, у каждого объекта есть картинка, путь к папке со всеми картинками знает только сам ПХП скрипт, отсюда проблема, как этот путь узнает XSL. Этот путь я потом вставляю в <a href="{$path}/{$file_name}">...
Какие ещё мысли есть?

Vlad Drakula 01-06-2006 12:44 445026

vadimiron
на сколько я помню у вункции которая парсит есть тредтий агруемент, хеш массив параметров к преобразованию.

vadimiron 01-06-2006 12:55 445033

Vlad Drakula
Я использую вот так:
PHP код:

$xsltproc = new XsltProcessor();

$xsl = new DomDocument;
$xsl->loadXSL_DIR."/content_list.xsl");

$xsltproc->importStylesheet($xsl);

$xml_doc DomDocument::loadXML($xml);

$html $xsltproc->transformToXML($xml_doc); 

Там нет больше ничего :(
Может ты имеешь в виду другой класс??

есть ещё функция $xsltproc->setParameter('', 'path', "C:\Temp");
но я не понимаю, как потом этот параметр вылавливать в XSL

Vlad Drakula 01-06-2006 13:01 445035

vadimiron
Цитата:

есть ещё функция $xsltproc->setParameter('', 'path', "C:\Temp");
но я не понимаю, как потом этот параметр вылавливать в XSL
наверное именно она, но я у себя использовал не классы а функции...

vadimiron 01-06-2006 13:07 445036

Vlad Drakula
А если ты передаёшь параметры, то как ты к ним потом в XSL обращаяшься???

Vlad Drakula 01-06-2006 13:13 445039

vadimiron
PHP код:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" >
    <
xsl:output method="xml"/>
    <
xsl:param name="****"/> 

заводит глобальную переменную...

benya 01-06-2006 14:23 445065

Vlad Drakula,
Я же говорю что для новичка в XSLT это тяжело понять. Куда впихнуть движок, как его применять + как преобразовывать + изчить хоть самые минимальные приемы для извлечения данных. Если знать как делать, то эти новости и за 10 мин. можно сдеать.

Vlad Drakula 01-06-2006 15:15 445099

benya
та вот учится нужно... все когданибуть бывает в первый раз...

Plutonium 239 03-06-2006 05:32 445852

Может кто-нибудь все таки объяснит, или хотябы ссылку на подробное описание этого процесса даст?

Vlad Drakula 22-06-2006 15:08 453634

Plutonium 239
к вопросу о том как получить в PHP нужные значения из XML http://forum.oszone.net/post-449778.html


Время: 15:46.

Время: 15:46.
© OSzone.net 2001-