PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (2): [1] 2 »
Найдено сообщений: 30
ybiza
Отправлено: 03 Июля, 2014 - 18:24:03 • Тема: Соединить множество XML файлов в один • Форум: XML и его обработка
Ответов: 7 Просмотров: 7392
Всем спасибо кто откликнулся! Решил свою проблему.
CODE (
htmlphp ):
скопировать код в буфер обмена
class XMLFile
{
public $fullArray = array ();
private $writer;
private $version = '1.0';
private $encoding = 'UTF-8';
private $rootName = 'root';
private $saveRoot = 'SettingArray.xml';
public function XmlToArray ($element, $arr = array())
{
if (is_string ($element))
{
$element = (strlen ($element) > 5 && substr ($element, -4) === '.xml')
? simplexml_load_file (__DIR__. "/". $element)
: simplexml_load_string ($element);
}
foreach ($element->children () as $base)
{
$sub = $base->getName ();
if (!$base->children ())
{
$arr[$sub] = trim ($base [0]);
}
else
{
$arr[$sub]= array();
$arr[$sub] = $this->XmlToArray ($base, $arr [$sub]);
}
}
return $arr;
}
public function convertXML ($data)
{
$this->writer = new XMLWriter();
$this->writer->openMemory();
$this->writer->setIndent ('on');
$this->writer->startDocument($this->version, $this->encoding);
$this->writer->startElement($this->rootName);
if (is_array($data))
{
$this->getXML($data);
}
$this->writer->endElement();
return $this->writer->outputMemory();
}
private function getXML ($data)
{
foreach ($data as $key => $val)
{
if (is_numeric($key))
{
$key = 'item'. $key;
}
if (is_array ($val))
{
$this->writer->startElement($key);
$this->getXML($val);
$this->writer->endElement();
}
else
{
$this->writer->writeElement($key, $val);
}
}
}
public function saveArray ($element = array ())
{
foreach ($element as $base)
{
$this->fullArray = array_merge_recursive ((array) $this->fullArray, (array) $this->XmlToArray ($base));
}
return $this->fullArray;
}
public function saveXML ($element)
{
$xml = file_put_contents ($this->saveRoot, $element);
return $xml;
}
}
Вот класс.
Пример xml:
Класс разбирает xml такого формата, может быть разбирает еще что нибудь но я не ставил эксперименты.
Пример использования:
CODE (
htmlphp ):
скопировать код в буфер обмена
$xml = new XMLFile; // Запускаем класс для работы
$arrayFile = array ( "SettingsXML.xml" , "library/SettingsXML.xml" , "library/ally/SettingsXML.xml" ) ; $xml -> saveArray ( $arrayFile ) ; // разберем xml который находятся в несколько файлов в один массив, используя рекурсию
$xml -> fullArray [ 'File3' ] [ 'Name' ] = "Привет" ; // Редактирование массива
$xml -> saveXML ( $xml -> convertXML ( $xml -> fullArray ) ) ; преобразовываем массив в xml и сохраним xml в заранее определенное место.
// Также
$xml -> XmlToArray ( ) // Может разобрать один файл или отдельную строку в массив
Есть небольшая просьба, если кто-то знает как можно улучшить процесс, можете отписать, буду благодарен.
ybiza
Отправлено: 03 Июля, 2014 - 15:09:18 • Тема: Соединить множество XML файлов в один • Форум: XML и его обработка
Ответов: 7 Просмотров: 7392
Решил пойти другим путем и создать Массив самостоятельно, а не через SimpleXml, так как тот создает объект, что немного отличает его от моей типографии.
Но встала опять проблема:
XML:
CODE (
htmlphp ):
скопировать код в буфер обмена
<? xml version= "1.0" ?>
< root>
< File2>
< Name> File2Site</ Name>
< Path> /library/ally/File2Site.class.php</ Path>
< Prefix> F2S_</ Prefix>
</ File2>
< File3>
< Name> File2Site</ Name>
< Path> /library/ally/File2Site.class.php</ Path>
< Prefix> F2S_</ Prefix>
</ File3>
</ root>
CODE (
htmlphp ):
скопировать код в буфер обмена
$this->xml = new XMLReader();
function parse($contents) {
$this->xml->open($contents);
$this->xml->next();
$current = &$array[$this->xml->localName];
$stack[0]= &$current;
while($this->xml->read()){
if($this->xml->nodeType == XMLReader::ELEMENT){
$current = &$stack [$this->xml->depth-1];
$stack [$this->xml->depth] = &$current[$this->xml->localName];
$current = &$stack[sizeof($stack)-1];
}
}
return $array;
}
Выдает:
То есть в массив не может поместить значения второй группы. Как можно исправить. Есди не трудно пример кода.
ybiza
Отправлено: 02 Июля, 2014 - 20:12:52 • Тема: Соединить множество XML файлов в один • Форум: XML и его обработка
Ответов: 7 Просмотров: 7392
Здравствуйте! Дело в следующем. У меня в проекте имеются множество XML файлов с одинаковыми именами (настройки для каждого переложения, языковые пакеты). Формат файла следующий:
Я ищу по каталогу в папках сайта пути к файлам XML, после чего через SimpleXML в цикле соединяю их в один рекурсивный массив.
После чего я пытаюсь создать из массива XML единый документ, но вот на этом этапе у меня сложности.
Я использую следующую функцию:
CODE (
htmlphp ):
скопировать код в буфер обмена
public function convertXML ( $data )
{
$this -> writer -> openMemory ( ) ;
$this -> writer -> setIndent ( 'on' ) ;
$this -> writer -> startDocument ( $this -> version , $this -> encoding ) ;
$this -> writer -> startElement ( $this -> rootName ) ;
$this -> getXML ( $data ) ;
$this -> writer -> endElement ( ) ;
return $this -> writer -> outputMemory ( ) ;
}
private function getXML ( $data )
{
foreach ( $data as $key => $val )
{
{
$key = 'item' . $key ;
}
{
foreach ( $val as $oject => $value )
{
$this -> writer -> writeElement ( $oject , $value ) ;
}
}
{
$this -> writer -> writeElement ( $key , $val ) ;
$this -> getXML ( $val ) ;
$this -> writer -> endElement ( ) ;
}
else
{
$this -> writer -> writeElement ( $key , $val ) ;
}
}
}
Результат выполнения сохраняется в файл в последующем, но в нем имеются пустые строки. Что здесь может быть не понимаю. Уже третий день бьюсь, а победить не удается. Если этот путь ошибочный, то может кто-нибудь предоставить другое решение задачи "Преобразовать XML данные в массив, соединить массивы, а массив преобразовать в XML, либо соединить все XML в один без массива с учетом моей структуры.
ybiza
Отправлено: 04 Декабря, 2012 - 18:14:53 • Тема: Первая # остальное буквы и цифры • Форум: Регулярные выражения
Ответов: 2 Просмотров: 209
Спасибо большое! Еще один вопрос, как удалить пробелы из строки регуляркой!
(Добавление)
ybiza пишет:
Спасибо большое! Еще один вопрос, как удалить пробелы из строки регуляркой!
preg_replace("#[^\#]+(\#.+)\s #i", "$1", $a);
Делаю так, но это удаляет пробелы только если строка #user
ybiza
Отправлено: 04 Декабря, 2012 - 18:02:38 • Тема: Первая # остальное буквы и цифры • Форум: Регулярные выражения
Ответов: 2 Просмотров: 209
Каким должно быть регулярное выражение, если необходимо удалить все кроме первого знака #, букв и цифр.
то есть строка должна быть
#user
или
user
ybiza
Отправлено: 02 Февраля, 2011 - 21:10:30 • Тема: Скрипт по работе с изображением любого типа • Форум: Напишите за меня, пожалуйста
Ответов: 2 Просмотров: 29
Помогите пожалуйста! Недели две уже ищу готовое решение по работе с изображением любого типа. т.е. Чтобы обрабатывал все изображения уменьшал хорошо обрезал пропорционально чтобы получались в общем хорошие фото и сохранял их. Наверняка у кого нибудь есть готовые решения которыми вы часто пользуетесь и довольны их работой если не жалко поделитесь!
ybiza
Отправлено: 02 Февраля, 2011 - 12:50:41 • Тема: Одно слово! • Форум: Регулярные выражения
Ответов: 6 Просмотров: 406
В регулярных выражениях вообще не чего не понимаю поэтому прошу помощи. Мне необходимо проверить одно ли слово введено в поле формы. как это можно сделать?
ybiza
Отправлено: 01 Февраля, 2011 - 16:40:00 • Тема: Загрузка несколько изображений на сервер одновременно. • Форум: Программирование на PHP
Ответов: 3 Просмотров: 358
Скажите пожалуйста возможна ли загрузка несколько изображений на сервер одновременно т.е. нажимаем на кнопку обзор открывает папка на компьютере выберем нужные изображения jpg после чего обрабатываем массив из этих изображений. Я вижу это как то так! Есть ли какие либо способы сделать что то подобное или это делается как то по другому.? Какой выход в этой ситуации?
ybiza
Отправлено: 14 Января, 2011 - 09:07:39 • Тема: Функция mail() • Форум: Напишите за меня, пожалуйста
Ответов: 3 Просмотров: 29
zypikov! Спасибо я разобрался просто я файл отправлял файл с сервера но на сервер не закачивал а надо было отправлять временной файл
ybiza
Отправлено: 09 Января, 2011 - 21:37:23 • Тема: Не могу передать файл на почту • Форум: Программирование на PHP
Ответов: 2 Просмотров: 336
Не могу передать файл на почту выдает ошибку
записываю в переменную, и дальше прикрепляю к письму, но в итоге переменная пустая наверное от сюда и ошибка пустая . Как правильно сделать!?
Страниц (2): [1] 2 »
Powered by ExBB FM 1.0 RC1. InvisionExBB