Intereting Posts
file_exists () слишком медленный в PHP. Может ли кто-нибудь предложить более быструю альтернативу? Как построить дерево в php с идентификаторами id, parent_id и глубиной PHP – доступ к глобальным переменным во всех функциях класса Контактная форма отправляет электронную почту, но не приходят письма WooCommerce – добавить столбец в таблицу управления продуктом Cat Laravel MethodNotAllowedHttpException в форме POST Не помещается на место, пакет, загруженный классом, требуется от композитора, делает php throw Класс не найден Получение серийного номера жесткого диска, предоставляемого производителем через PHP Делает ли mysql_query все обновить определенную запись из списка массива mysql Nginx – wordpress в подкаталоге, какие данные должны быть переданы? Программно получить список всех способов доставки Отправка данных, таких как целые числа и текстовые строки, из телефона в веб-базу данных Максимальное время выполнения PHP GoDaddy не работает Лучший способ включения представлений в представлениях в CodeIgniter

XMLReader & simpleXML Combo, с условиями

Я использую комбинацию XMLReader и simpleXML для анализа сообщений в файле экспорта WordPress. Я понимаю, что это немного не соответствует норме, но это больше для резервного проекта, поэтому мы можем легко подтянуть одну из этих статей, если нам это нужно в futre. Сайт WP, на котором они были, должен спуститься.

Проблема, с которой я сталкиваюсь, заключается в том, что некоторые из узлов в файле XML пусты или содержат бесполезные значения (т. Е. Не полные сообщения). Мне нужно добавить некоторые условия длины строки, но я не уверен, как проверить их.

<?php $path_to_xml_file = 'compress.zlib://wordpress.2011.xml.gz'; $reader = new XMLReader(); $reader->open($path_to_xml_file); while($reader->read()) { if($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'item') { $doc = new DOMDocument('1.0', 'UTF-8'); $xml = simplexml_import_dom($doc->importNode($reader->expand(),true)); //echo $xml->title; //or whatever // Take care of the articles $newcontent = $xml->children('http://purl.org/rss/1.0/modules/content/'); $contentString = $newcontent->encoded; $titleString = $xml->title; echo ' <div class="article-container" id="article-' . $xml->title . '"> <a href="#top" class="top-link">Back to the Top</a> <h2>' . $xml->title . '</h2> <div class="articles">' . $newcontent->encoded . '</div> </div>'; } } ?> 

Я смог успешно проверить это с помощью simpleXML, но это было слишком много из памяти. Это был мой код simplexml :

 <?php $url = 'wordpress.2011.xml.gz'; $xml = new SimpleXMLElement("compress.zlib://$url", NULL, TRUE); foreach ($xml->item as $item) : $newcontent = $item->children('http://purl.org/rss/1.0/modules/content/'); ?> <?php $contentString = $newcontent->encoded; $titleString = $item->title; if ((strlen($contentString) < 13) || (strlen($titleString) < 5)) { echo ''; } else { echo ' <div class="article-container" id="article-' . $item->title . '"> <a href="#top" class="top-link">Back to the Top</a> <h2>' . $item->title . '</h2> <div class="articles">' . $newcontent->encoded . '</div> </div>'; } ?> <?php endforeach; ?> 

ОБНОВИТЬ

С помощью Фрэнсиса он работает сейчас. Вот код:

 <?php $path_to_xml_file = 'compress.zlib://wordpress.2011.xml.gz'; $reader = new XMLReader(); $reader->open($path_to_xml_file); $contentNS = 'http://purl.org/rss/1.0/modules/content/'; while($reader->read()) { if($reader->nodeType == XMLReader::ELEMENT and $reader->name == 'item') { $doc = new DOMDocument('1.0','UTF-8'); $xml = simplexml_import_dom($doc->importNode($reader->expand(), true)); $titleString = (string) $xml->title; $contentString = (string) $xml->children($contentNS)->encoded; if (strlen($contentString) > 12 and strlen($titleString) > 4) { // Be careful with your output escaping! // This below looks like it might be wrong: // - $titleString for an ID (use slug) // - $titleString not escaped // - $contentString should be escaped? not sure here. // Have you considered using XMLWriter()? echo ' <div class="article-container" id="article-' . $titleString . '"> <a href="#top" class="top-link">Back to the Top</a> <h2>' . $titleString . '</h2> <div class="articles">' . $contentString . '</div> </div>'; } else { echo''; } $reader->next(); //skip the subtrees, go to next item sibling // we already expand()ed this so we don't need to walk it. } } ?> 

Related of "XMLReader & simpleXML Combo, с условиями"