PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (2): [1] 2 »

> Найдено сообщений: 30
ybiza Отправлено: 08 Октября, 2016 - 07:22:11 • Тема: Соединить множество XML файлов в один • Форум: XML и его обработка

Ответов: 7
Просмотров: 7509
Вам необходимо создать новый файл из нескольких файлов
ybiza Отправлено: 03 Июля, 2014 - 18:24:03 • Тема: Соединить множество XML файлов в один • Форум: XML и его обработка

Ответов: 7
Просмотров: 7509
Всем спасибо кто откликнулся! Решил свою проблему.
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. class XMLFile
  3. {
  4.  
  5.  public  $fullArray = array ();
  6.  private $writer;
  7.  private $version =  '1.0';
  8.  private $encoding = 'UTF-8';
  9.  private $rootName = 'root';
  10.  private $saveRoot = 'SettingArray.xml';
  11.  
  12.  public function XmlToArray ($element, $arr = array())
  13.   {
  14.    if (is_string ($element))
  15.         {
  16.                 $element = (strlen ($element) > 5 && substr ($element, -4) === '.xml')
  17.                                         ? simplexml_load_file (__DIR__. "/". $element)
  18.                                         : simplexml_load_string ($element);
  19.         }
  20.    foreach ($element->children () as $base)
  21.         {
  22.                 $sub = $base->getName ();
  23.                 if (!$base->children ())
  24.                         {
  25.                                 $arr[$sub] = trim ($base [0]);
  26.                         }
  27.                 else
  28.                         {
  29.                                 $arr[$sub]= array();
  30.                                 $arr[$sub] = $this->XmlToArray ($base, $arr [$sub]);
  31.                         }
  32.                                            
  33.                                         }
  34.                                 return $arr;
  35.                         }
  36.  
  37.   public function convertXML ($data)
  38.    {
  39.         $this->writer = new XMLWriter();
  40.         $this->writer->openMemory();
  41.         $this->writer->setIndent ('on');
  42.         $this->writer->startDocument($this->version, $this->encoding);
  43.         $this->writer->startElement($this->rootName);
  44.         if (is_array($data))
  45.                 {
  46.                         $this->getXML($data);
  47.                 }
  48.         $this->writer->endElement();
  49.         return $this->writer->outputMemory();
  50.   }
  51.  
  52.   private function getXML ($data)
  53.   {
  54.         foreach ($data as $key => $val)
  55.                 {
  56.                         if (is_numeric($key))
  57.                                 {
  58.                                         $key = 'item'. $key;
  59.                                 }
  60.                                 if (is_array ($val))
  61.                                         {
  62.                                                 $this->writer->startElement($key);
  63.                                                 $this->getXML($val);
  64.                                                 $this->writer->endElement();
  65.                                         }
  66.                                 else
  67.                                         {
  68.                                                                 $this->writer->writeElement($key, $val);
  69.                                         }
  70.                 }
  71.    }
  72.  
  73.         public function saveArray ($element = array ())
  74.                         {
  75.                                 foreach ($element as $base)
  76.                                         {
  77.                                                 $this->fullArray = array_merge_recursive ((array) $this->fullArray, (array) $this->XmlToArray ($base));
  78.                                         }
  79.                                 return $this->fullArray;
  80.                         }
  81.  
  82.         public function saveXML ($element)
  83.                         {
  84.                                 $xml = file_put_contents ($this->saveRoot, $element);
  85.                                 return $xml;
  86.                         }
  87.         }
  88.  


Вот класс.
Пример xml:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  <File3>
  3.   <Name>1</Name>
  4.   <Path>2</Path>
  5.   <Prefix>3</Prefix>
  6.  </File3>
  7.  

Класс разбирает xml такого формата, может быть разбирает еще что нибудь но я не ставил эксперименты.
Пример использования:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $xml =  new XMLFile; // Запускаем класс для работы
  3. $arrayFile = array ("SettingsXML.xml", "library/SettingsXML.xml", "library/ally/SettingsXML.xml");
  4. $xml->saveArray ($arrayFile); // разберем xml который находятся в несколько файлов в один массив, используя рекурсию
  5. $xml->fullArray ['File3']['Name'] = "Привет"; // Редактирование массива
  6. $xml->saveXML ($xml->convertXML ($xml->fullArray)); преобразовываем массив в xml и сохраним xml в заранее определенное место.
  7. // Также
  8. $xml->XmlToArray () // Может разобрать один файл или отдельную строку в массив
  9.  

Есть небольшая просьба, если кто-то знает как можно улучшить процесс, можете отписать, буду благодарен.
ybiza Отправлено: 03 Июля, 2014 - 15:09:18 • Тема: Соединить множество XML файлов в один • Форум: XML и его обработка

Ответов: 7
Просмотров: 7509
Решил пойти другим путем и создать Массив самостоятельно, а не через SimpleXml, так как тот создает объект, что немного отличает его от моей типографии.
Но встала опять проблема:
XML:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?xml version="1.0"?>
  3. <root>
  4.         <File2>
  5.                 <Name>File2Site</Name>
  6.                 <Path>/library/ally/File2Site.class.php</Path>
  7.                 <Prefix>F2S_</Prefix>
  8.         </File2>
  9.         <File3>
  10.                 <Name>File2Site</Name>
  11.                 <Path>/library/ally/File2Site.class.php</Path>
  12.                 <Prefix>F2S_</Prefix>
  13.         </File3>
  14. </root>
  15.  

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.      $this->xml = new XMLReader();
  3.  
  4.      function parse($contents) {
  5.         $this->xml->open($contents);      
  6.         $this->xml->next();
  7.         $current = &$array[$this->xml->localName];
  8.         $stack[0]= &$current;
  9.         while($this->xml->read()){
  10.           if($this->xml->nodeType == XMLReader::ELEMENT){
  11.           $current = &$stack [$this->xml->depth-1];
  12.           $stack [$this->xml->depth] = &$current[$this->xml->localName];
  13.           $current = &$stack[sizeof($stack)-1];
  14.          }
  15.         }
  16.         return $array;
  17.     }
  18.  

Выдает:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. (
  3.     [root] => Array
  4.         (
  5.             [File2] => Array
  6.                 (
  7.                     [Name] =>
  8.                     [Path] =>
  9.                     [Prefix] =>
  10.                 )
  11.  
  12.             [File3] => Array
  13.                 (
  14.                     [Name] =>
  15.                     [Path] =>
  16.                     [Prefix] =>
  17.                 )
  18.  
  19.         )
  20.  
  21. )
  22.  

То есть в массив не может поместить значения второй группы. Как можно исправить. Есди не трудно пример кода.
ybiza Отправлено: 02 Июля, 2014 - 20:12:52 • Тема: Соединить множество XML файлов в один • Форум: XML и его обработка

Ответов: 7
Просмотров: 7509
Здравствуйте! Дело в следующем. У меня в проекте имеются множество XML файлов с одинаковыми именами (настройки для каждого переложения, языковые пакеты). Формат файла следующий:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <root>
  4.   <Name1>
  5.     <Name></Name>
  6.     <Setting></Setting>
  7.   </Name1>
  8. <root>
  9.  

Я ищу по каталогу в папках сайта пути к файлам XML, после чего через SimpleXML в цикле соединяю их в один рекурсивный массив.

После чего я пытаюсь создать из массива XML единый документ, но вот на этом этапе у меня сложности.
Я использую следующую функцию:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.                 public function convertXML ($data)
  3.                         {
  4.                                 $this->writer->openMemory();
  5.                                 $this->writer->setIndent ('on');
  6.                                 $this->writer->startDocument($this->version, $this->encoding);
  7.                                 $this->writer->startElement($this->rootName);
  8.                                         $this->getXML($data);
  9.                                 $this->writer->endElement();
  10.                                 return $this->writer->outputMemory();
  11.                         }
  12.  
  13.                 private function getXML ($data)
  14.                         {
  15.                                 foreach ($data as $key => $val)
  16.                                         {
  17.  
  18.                                                 if (is_numeric($key))
  19.                                                         {
  20.                                                                 $key = 'item'. $key;
  21.                                                         }
  22.                                                 if (is_object($val))
  23.                                                         {      
  24.                                                                 foreach ($val as $oject => $value)                     
  25.                                                                         {
  26.                                                                                 $this->writer->writeElement($oject, $value);
  27.                                                                         }
  28.                                                         }
  29.                                                 if (is_array ($val))
  30.                                                         {
  31.                                                                 $this->writer->writeElement($key, $val);
  32.                                                                 $this->getXML($val);
  33.                                                                 $this->writer->endElement();
  34.                                                         }
  35.                                                 else
  36.                                                         {
  37.                                                                 $this->writer->writeElement($key, $val);
  38.                                                         }
  39.                                         }
  40.                         }
  41.  

Результат выполнения сохраняется в файл в последующем, но в нем имеются пустые строки. Что здесь может быть не понимаю. Уже третий день бьюсь, а победить не удается. Если этот путь ошибочный, то может кто-нибудь предоставить другое решение задачи "Преобразовать XML данные в массив, соединить массивы, а массив преобразовать в XML, либо соединить все XML в один без массива с учетом моей структуры.
ybiza Отправлено: 04 Декабря, 2012 - 18:14:53 • Тема: Первая # остальное буквы и цифры • Форум: Регулярные выражения

Ответов: 2
Просмотров: 217
ams пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. $a = 'asdas da sd a#sdg 23423';
  3. echo preg_replace("#[^\#]+(\#.+)#i", "$1", $a);
  4.  

Спасибо большое! Еще один вопрос, как удалить пробелы из строки регуляркой!
(Добавление)
ybiza пишет:
ams пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. $a = 'asdas da sd a#sdg 23423';
  3. echo preg_replace("#[^\#]+(\#.+)#i", "$1", $a);
  4.  

Спасибо большое! Еще один вопрос, как удалить пробелы из строки регуляркой!


preg_replace("#[^\#]+(\#.+)\s#i", "$1", $a);

Делаю так, но это удаляет пробелы только если строка #user
ybiza Отправлено: 04 Декабря, 2012 - 18:02:38 • Тема: Первая # остальное буквы и цифры • Форум: Регулярные выражения

Ответов: 2
Просмотров: 217
Каким должно быть регулярное выражение, если необходимо удалить все кроме первого знака #, букв и цифр.

то есть строка должна быть

#user

или

user
ybiza Отправлено: 28 Ноября, 2011 - 21:12:04 • Тема: URL+APACHE • Форум: Apache и другие веб-серверы

Ответов: 0
Просмотров: 270
Как сделать так чтобы домен типа http://name[dot]mysite[dot]ru/ в адресной строке оставался таким же, а для php передавал $_GET['user'] = name при этом сервером не учитывался как домен третьего уровня
ybiza Отправлено: 03 Февраля, 2011 - 07:27:41 • Тема: Скрипт по работе с изображением любого типа • Форум: Напишите за меня, пожалуйста

Ответов: 2
Просмотров: 37
Спасибо БОЛЬШОЕ! Готовое решение помогло!
ybiza Отправлено: 02 Февраля, 2011 - 21:10:30 • Тема: Скрипт по работе с изображением любого типа • Форум: Напишите за меня, пожалуйста

Ответов: 2
Просмотров: 37
Помогите пожалуйста! Недели две уже ищу готовое решение по работе с изображением любого типа. т.е. Чтобы обрабатывал все изображения уменьшал хорошо обрезал пропорционально чтобы получались в общем хорошие фото и сохранял их. Наверняка у кого нибудь есть готовые решения которыми вы часто пользуетесь и довольны их работой если не жалко поделитесь!
ybiza Отправлено: 02 Февраля, 2011 - 12:58:13 • Тема: Одно слово! • Форум: Регулярные выражения

Ответов: 6
Просмотров: 422
Спасибо большое!
ybiza Отправлено: 02 Февраля, 2011 - 12:50:41 • Тема: Одно слово! • Форум: Регулярные выражения

Ответов: 6
Просмотров: 422
В регулярных выражениях вообще не чего не понимаю поэтому прошу помощи. Мне необходимо проверить одно ли слово введено в поле формы. как это можно сделать?
ybiza Отправлено: 01 Февраля, 2011 - 17:44:17 • Тема: Загрузка несколько изображений на сервер одновременно. • Форум: Программирование на PHP

Ответов: 3
Просмотров: 366
А как именно? Вы можете дать ссылку на пример js или напишите здесь буду очень благодарен!
ybiza Отправлено: 01 Февраля, 2011 - 16:40:00 • Тема: Загрузка несколько изображений на сервер одновременно. • Форум: Программирование на PHP

Ответов: 3
Просмотров: 366
Скажите пожалуйста возможна ли загрузка несколько изображений на сервер одновременно т.е. нажимаем на кнопку обзор открывает папка на компьютере выберем нужные изображения jpg после чего обрабатываем массив из этих изображений. Я вижу это как то так! Есть ли какие либо способы сделать что то подобное или это делается как то по другому.? Какой выход в этой ситуации?
ybiza Отправлено: 14 Января, 2011 - 09:07:39 • Тема: Функция mail() • Форум: Напишите за меня, пожалуйста

Ответов: 3
Просмотров: 32
zypikov! Спасибо я разобрался просто я файл отправлял файл с сервера но на сервер не закачивал а надо было отправлять временной файл
PHP:
скопировать код в буфер обмена
  1. $_FILES['uploadfile']['tmp_name'];
ybiza Отправлено: 09 Января, 2011 - 21:37:23 • Тема: Не могу передать файл на почту • Форум: Программирование на PHP

Ответов: 2
Просмотров: 347
Не могу передать файл на почту выдает ошибку
CODE (html):
скопировать код в буфер обмена
  1. Warning: fopen() [function.fopen]: Filename cannot be empty


CODE (html):
скопировать код в буфер обмена
  1. $file_name = $_FILES['file_name'];

записываю в переменную, и дальше прикрепляю к письму, но в итоге переменная пустая наверное от сюда и ошибка пустая . Как правильно сделать!?

Страниц (2): [1] 2 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB