Форум → Программирование → PHP для идиотов → чем парсить XML?
чем парсить XML?
Страницы: ← Следующая страница →
-
-
27 сентября 2010 г. 22:31, спустя 13 минут 5 секунд
тут проблема в том, что все 3 вышеперечисленных мною класса используются в нашем модуле. Пиздец да и только. Особенно прикольны такие моменты:
получили XML с внешнего сервиса
передали его в другой метод
создали инстанцию DomDocument, загрузили в нее XML
сохранили на диске ($dd->save())
открыли этот файл при помощи simplexml_load_file/XmlReader
хочется взять и уебать -
27 сентября 2010 г. 22:35, спустя 4 минуты 36 секунд
Я "явно" юзал только SimpleXMLhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
27 сентября 2010 г. 22:37, спустя 1 минуту 57 секунд
скриптом парси!You can be anything you want to be. Just turn yourself into anything you think that you could ever be. -
27 сентября 2010 г. 22:43, спустя 5 минут 41 секунду
ок, пожалуй его и буду использовать. Как вы все наверно знаете я XML недолюбливаю и не использую, поэтому всех тонкостей не знаю: может какие-то классы считаются устаревшими/плохими/кандидатами на получение бирки deprecated. Не хочется наступать на граблиСпустя 17 сек.его - симплхмлСпустя 215 сек.Фабьен тоже SimpleXml использует/**
* @throws \InvalidArgumentException When loading of XML file returns error
*/
protected function parseFile($file)
{
$dom = new \DOMDocument();
libxml_use_internal_errors(true);
if (!$dom->load($file, LIBXML_COMPACT)) {
throw new \InvalidArgumentException(implode("\n", $this->getXmlErrors()));
}
$dom->validateOnParse = true;
$dom->normalizeDocument();
libxml_use_internal_errors(false);
$this->validate($dom, $file);
return simplexml_import_dom($dom, 'Symfony\\Component\\DependencyInjection\\SimpleXMLElement');
}
pissflaps, adw0rd, у вас хороший вкус, ребята) -
27 сентября 2010 г. 22:56, спустя 13 минут 9 секунд
ухаха, льстец :Dhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
28 сентября 2010 г. 6:14, спустя 7 часов 17 минут 53 секунды
pissflaps, adw0rd, у вас хороший вкус, ребята)
очевидный под пхп5 увыСапожник без сапог -
28 сентября 2010 г. 9:20, спустя 3 часа 6 минут 21 секунду
Фабьен тоже SimpleXml использует
гыС возвращением, Пiха! hyperoff.ru - качественный хостинг php -
28 сентября 2010 г. 10:24, спустя 1 час 3 минуты 35 секунд
phpdude,
Нас готовят к 5.3 / 6.0, а ты всё говоришь о 4х xD -
28 сентября 2010 г. 10:42, спустя 17 минут 43 секунды
pissflaps, ты про simplexml ? это лучшее решение из всех предлагаемых в пхп. если есть лучше - скажи что это за решение?Сапожник без сапог -
28 сентября 2010 г. 10:46, спустя 4 минуты 8 секунд
phpdude,
Да ты неверно понял, ты просто отписал:очевидный под пхп5 увы
Я и говорю, что стоит разочаровываться в том, что в 4х этого нет, если 4х уже устарел.
Вот. ;)Спустя 33 сек.Можно самому себе жать на пост "Хуита?" офф-топ -
28 сентября 2010 г. 11:15, спустя 29 минут 6 секунд
simplexml годится для парсинга, но не годится для конструирования xml, приходится пользоваться domdocumentне всё полезно, что в swap полезло -
28 сентября 2010 г. 12:21, спустя 1 час 6 минут 3 секунды
simplexml годится для парсинга, но не годится для конструирования xml, приходится пользоваться domdocument
годится для конструирования нормально, вот для РЕДАКТИРОВАНИЯ увы не годится, он узлы не умеет сука удалять нативно, приходится через домдокумент изъябыватьсяСапожник без сапог -
28 сентября 2010 г. 12:56, спустя 34 минуты 29 секунд
xml не так уж и неприятно парсить, если перегнать его в массив)public function xml2array($xml)
{
if (is_string($xml) && is_int(strpos($xml, '<?'))) {
$xml = simplexml_load_string($xml);
}
if ($xml instanceof SimpleXMLElement) {
foreach ($xml->attributes() as $k => $v) {
$v && $a[$k] = (string)$v;
}
$x = $xml;
$xml = get_object_vars($xml);
}
if (is_array($xml)) {
if (count($xml) == 0)
return (string)$x; // CDATA
foreach ($xml as $key => $value) {
$r[$key] = $this->xml2array($value);
}
if (isset($a))
$r['@'] = $a; // attributes
return $r;
}
return (string)$xml;
}
найденная на просторах пхп.нет функция 2005 года. Немного оттюнингованная: теперь может принимать строку xml (а раньше только объект SimpleXMLElement) и если уж получает объект - он может быть наследником SimpleXMLElement (get_class vs instanceof)
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!