ФорумПрограммированиеPHP для идиотов → чем парсить XML?

чем парсить XML?

  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 27 сентября 2010 г. 14:15

    http://ua2.php.net/manual/en/refs.xml.php
    куча всего-всего. Что же выбрать: SimpleXML, DomDocument, XmlReader?
  • pissflaps

    Сообщения: 148 Репутация: N Группа: Кто попало

    Spritz 27 сентября 2010 г. 14:18, спустя 2 минуты 45 секунд

    Всегда работал с SimpleXML.
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 27 сентября 2010 г. 14:31, спустя 13 минут 5 секунд

    тут проблема в том, что все 3 вышеперечисленных мною класса используются в нашем модуле. Пиздец да и только. Особенно прикольны такие моменты:

    получили XML с внешнего сервиса
    передали его в другой метод
    создали инстанцию DomDocument, загрузили в нее XML
    сохранили на диске ($dd->save())
    открыли этот файл при помощи simplexml_load_file/XmlReader

    хочется взять и уебать
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 сентября 2010 г. 14:35, спустя 4 минуты 36 секунд

    Я "явно" юзал только SimpleXML
    adw/0
  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 27 сентября 2010 г. 14:37, спустя 1 минуту 57 секунд

    скриптом парси!
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 27 сентября 2010 г. 14: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, у вас хороший вкус, ребята)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 сентября 2010 г. 14:56, спустя 13 минут 9 секунд

    ухаха, льстец :D
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 27 сентября 2010 г. 22:14, спустя 7 часов 17 минут 53 секунды

    pissflaps, adw0rd, у вас хороший вкус, ребята)

    очевидный под пхп5 увы
    Сапожник без сапог
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 28 сентября 2010 г. 1:20, спустя 3 часа 6 минут 21 секунду

    Фабьен тоже SimpleXml использует

    гы
    С возвращением, Пiха!
  • pissflaps

    Сообщения: 148 Репутация: N Группа: Кто попало

    Spritz 28 сентября 2010 г. 2:24, спустя 1 час 3 минуты 35 секунд

    phpdude,
    Нас готовят к 5.3 / 6.0, а ты всё говоришь о 4х xD
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 28 сентября 2010 г. 2:42, спустя 17 минут 43 секунды

    pissflaps, ты про simplexml ? это лучшее решение из всех предлагаемых в пхп. если есть лучше - скажи что это за решение?
    Сапожник без сапог
  • pissflaps

    Сообщения: 148 Репутация: N Группа: Кто попало

    Spritz 28 сентября 2010 г. 2:46, спустя 4 минуты 8 секунд

    phpdude,
    Да ты неверно понял, ты просто отписал:
    очевидный под пхп5 увы

    Я и говорю, что стоит разочаровываться в том, что в 4х этого нет, если 4х уже устарел.
    Вот. ;)
    Спустя 33 сек.
    Можно самому себе жать на пост "Хуита?" офф-топ
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 28 сентября 2010 г. 3:15, спустя 29 минут 6 секунд

    simplexml годится для парсинга, но не годится для конструирования xml, приходится пользоваться domdocument
    не всё полезно, что в swap полезло
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 28 сентября 2010 г. 4:21, спустя 1 час 6 минут 3 секунды

    simplexml годится для парсинга, но не годится для конструирования xml, приходится пользоваться domdocument

    годится для конструирования нормально, вот для РЕДАКТИРОВАНИЯ увы не годится, он узлы не умеет сука удалять нативно, приходится через домдокумент изъябываться
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 28 сентября 2010 г. 4: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)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!