Intereting Posts
Получение выбранного раскрывающегося содержимого для показа в электронном письме с формой PHP Strip_tags для div с определенным идентификатором? Вставка данных в базу данных с помощью Laravel 5 Что я должен использовать для аутентификации пользователей в PHP? Приложение PHP MVC потеряло ссылки на ссылки на jss и css-файлы Модель Yii2 сохраняет нулевые значения Запрос Laravel Ajax не работает с контроллером Преобразуйте в PDF / A и проверьте соответствие Linux Добавление сбоев изображения (GD) PHP Запрос PHP CURL GET возвращает 500, где исправление bash преуспевает xdebug, eclipse, centos, удаленная отладка – невозможно остановить на контрольных точках Перенаправление на страницу администратора / пользователя после входа в систему WordPress: используйте метод = "post" для множественного выбора языка Измените эту функцию js так, чтобы она использовала значение, полученное из db вместо значений, указанных в массиве, для генерации опций Select Передача массива requestAction в CakePHP

XML-анализ с помощью php

Я хотел бы создать новый упрощенный xml на основе существующего: (используя «simpleXml»)

<?xml version="1.0" encoding="UTF-8"?> <xls:XLS> <xls:RouteInstructionsList> <xls:RouteInstruction> <xls:Instruction>Start</xls:Instruction> </xls:RouteInstruction> </xls:RouteInstructionsList> <xls:RouteInstructionsList> <xls:RouteInstruction> <xls:Instruction>End</xls:Instruction> </xls:RouteInstruction> </xls:RouteInstructionsList> </xls:XLS> 

Поскольку в тегах элементов всегда есть двоеточия, он будет работать с «simpleXml», я попытался использовать следующую ссылку solution->.

Как я могу создать новый xml с этой структурой:

 <main> <instruction>Start</instruction> <instruction>End</instruction> </main> 

«элемент-инструкция» получает свое содержание из прежнего «xls: Instruction-element».

Вот обновленный код: Но, к сожалению, он никогда не проскакивает:

 $source = "route.xml"; $xmlstr = file_get_contents($source); $xml = @simplexml_load_string($xmlstr); $new_xml = simplexml_load_string('<main/>'); foreach($xml->children() as $child){ print_r("xml_has_childs"); $new_xml->addChild('instruction', $child->RouteInstruction->Instruction); } echo $new_xml->asXML(); 

нет сообщения об ошибке, если я оставлю «@» …

Вы можете использовать xpath для упрощения. Не зная подробностей, я не знаю, будет ли это работать во всех случаях:

 $source = "route.xml"; $xmlstr = file_get_contents($source); $xml = @simplexml_load_string($xmlstr); $new_xml = simplexml_load_string('<main/>'); foreach ($xml->xpath('//Instruction') as $instr) { $new_xml->addChild('instruction', (string) $instr); } echo $new_xml->asXML(); 

Вывод:

 <?xml version="1.0"?> <main><instruction>Start</instruction><instruction>End</instruction></main> 

Изменить: файл по адресу http://www.gps.alaingroeneweg.com/route.xml не совпадает с XML, который у вас есть в вашем вопросе. Вам нужно использовать пространство имен, например:

 $xml = @simplexml_load_string(file_get_contents('http://www.gps.alaingroeneweg.com/route.xml')); $xml->registerXPathNamespace('xls', 'http://www.opengis.net/xls'); // probably not needed $new_xml = simplexml_load_string('<main/>'); foreach ($xml->xpath('//xls:Instruction') as $instr) { $new_xml->addChild('instruction', (string) $instr); } echo $new_xml->asXML(); 

Вывод:

 <?xml version="1.0"?> <main><instruction>Start (Southeast) auf Sihlquai</instruction><instruction>Fahre rechts</instruction><instruction>Fahre halb links - Ziel erreicht!</instruction></main> 
 /* the use of @ is to suppress warning */ $xml = @simplexml_load_string($YOUR_RSS_XML); $new_xml = simplexml_load_string('<main/>'); foreach ($xml->children() as $child) { $new_xml->addChild('instruction', $child->RouteInstruction->Instruction); } /* to print */ echo $new_xml->asXML();