PHP.SU

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

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

> Найдено сообщений: 13
myshara Отправлено: 22 Мая, 2015 - 15:15:02 • Тема: Перемещение элемента внутри XML • Форум: XML и его обработка

Ответов: 11
Просмотров: 3290
DeepVarvar пишет:
http://php.net/manual/en/class.d....previoussibling
http://php.net/manual/en/class.domnode.php#domnode.props.nextsibling


Спасибо.

Код для Up:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  $el->parentNode->insertBefore($el, $el->previousSibling);


Код для Down:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $el->parentNode->insertBefore($el, $el->nextSibling->nextSibling);


Но...
При последовательном выполнении Up элемент XML меняет позицию как бы по кругу.
Т.е. если он становиться первым, то при следующем Up - он последний.

А вот при последовательном Down когда элемент уже последний возникает ошибка:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <b>Notice</b>:  Trying to get property of non-object in ...


Что посоветуете?
myshara Отправлено: 22 Мая, 2015 - 14:45:14 • Тема: Перемещение элемента внутри XML • Форум: XML и его обработка

Ответов: 11
Просмотров: 3290
DeepVarvar пишет:
http://php.net/manual/en/domnode.insertbefore.php


Спасибо.

Уже дошел и досюда...

Но прикол в том что в insertbefore надо знать позицию элемента - item($pos)

В таком случае все равно придется организовывать цикл, и получать item.
Т.к. $el = $doc->getElementById($idnode) - не имеет свойства item.

И если для установки элемента последним код такой:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $el->parentNode->insertBefore($el);


А для установки первым код:

CODE (htmlphp):
скопировать код в буфер обмена
  1.             $firstel=$doc->getElementsByTagName('group')->item(0);
  2.             $el->parentNode->insertBefore($el, $firstel);


То как получить предыдущий или следующий елемент?
Без организации цикла, ведь текущий у нас уже есть???
myshara Отправлено: 22 Мая, 2015 - 11:05:39 • Тема: получение массива с атрибутом Id • Форум: XML и его обработка

Ответов: 7
Просмотров: 1656
Спасибо всем.

Помогли.
myshara Отправлено: 22 Мая, 2015 - 11:02:21 • Тема: Перемещение элемента внутри XML • Форум: XML и его обработка

Ответов: 11
Просмотров: 3290
Продолжаем.

Итак создал в xml DTD:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <!DOCTYPE structure [
  2. <!ELEMENT structure (group)+>
  3. <!ELEMENT group (propertis)>
  4. <!ELEMENT propertis (name , sort , show , count? , desc?)>
  5. <!ELEMENT name (#PCDATA)>
  6. <!ELEMENT sort (#PCDATA)>
  7. <!ELEMENT show (#PCDATA)>
  8. <!ELEMENT count (#PCDATA)>
  9. <!ELEMENT desc (#PCDATA)>
  10. <!ATTLIST group id ID #REQUIRED>
  11. ]>


Теперь в php:
CODE (htmlphp):
скопировать код в буфер обмена
  1.         $el = $doc->getElementById($idnode);
  2.         $el->parentNode->appendChild($el);
  3.         $doc->save('xml/'.$fname);


Получается переместить только в конец...
А как переместить в начало???
В указанную позицию????
myshara Отправлено: 21 Мая, 2015 - 19:04:02 • Тема: Перемещение элемента внутри XML • Форум: XML и его обработка

Ответов: 11
Просмотров: 3290
Еще раз перечитал мануал

И, на сколько я понял, получается обязательное наличие у xml DTD.
Т.е. getElementById не работает без указания структуры DTD.

Тогда законный вопрос зачем оно надо???
Если мне придется формировать по тегу список, а потом воять цикл для проверки?

Т.к. в моем случае код


Дает ошибку:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <b>Warning</b>:  DOMDocument::validate(): no DTD found! in ...
myshara Отправлено: 21 Мая, 2015 - 16:42:44 • Тема: Перемещение элемента внутри XML • Форум: XML и его обработка

Ответов: 11
Просмотров: 3290
Я понимаю что не нашел элемент.

Вопрос почему?

файл есть.
idnode - передается...

а результата нет... Почему...

Как проверить что в $doc?

Более того:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     $doc = new DOMDocument('1.0', 'UTF-8');
  2.     $doc->load('xml/'.$fname);
  3.     $el = $doc->getElementsByTagName('group');
  4.    $idnode = $el->item(2)->getAttribute('id');


Строка кода:
$idnode = $el->item(2)->getAttribute('id');

Возвращает правильное значение для $idnode - gp3

Вопрос почему в таком случае не работает
CODE (htmlphp):
скопировать код в буфер обмена
  1. $doc->getElementById('gp3');
myshara Отправлено: 21 Мая, 2015 - 15:38:41 • Тема: Перемещение элемента внутри XML • Форум: XML и его обработка

Ответов: 11
Просмотров: 3290
Насколько я понял.
Сначала загоняем элемент в переменную.
Потом удаляем из xml.
Затем вставляем в нужное положение из переменной.

CODE (htmlphp):
скопировать код в буфер обмена
  1.     $doc = new DOMDocument('1.0', 'UTF-8');
  2.     $doc->load('xml/'.$fname);
  3.     $el = $doc->getElementById($idnode);
  4.     $el->parentNode->removeChild($el);


Но у меня на этапе:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $el->parentNode->removeChild($el);


Ошибка:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <b>Notice</b>:  Trying to get property of non-object in ...
  2. <b>Fatal error</b>:  Call to a member function removeChild() on a non-object in...


Что не так???
myshara Отправлено: 21 Мая, 2015 - 08:54:36 • Тема: Перемещение элемента внутри XML • Форум: XML и его обработка

Ответов: 11
Просмотров: 3290
Привет Всем!

Кто знает каким путем можно поднять или опустить элемент внутри XML.

XML:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <structure>
  3.     <group id='gp1'><propertis>....<propertis></group>
  4.     <group id='gp2'><propertis>....<propertis></group>
  5.     <group id='gp3'><propertis>....<propertis></group>
  6.     ...
  7.     <group id='gp32'><propertis>....<propertis></group>
  8. </structure>


Допустим, что хотим group['gp2'] расположить первым, после group['gp3'] или последним.

Как это можно реализовать?
Что нужно перемещать - знаем. Куда - тоже знаем. А как?

Неужели нужно парсить в другой файл? Или есть более красивое решение?
myshara Отправлено: 20 Мая, 2015 - 13:52:55 • Тема: получение массива с атрибутом Id • Форум: XML и его обработка

Ответов: 7
Просмотров: 1656
Всем спасибо за участие.

Разобрался сам.

решение:

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


Цитата:
Горе от ума умников. (Илья Герчиков) ГОРЕ
myshara Отправлено: 20 Мая, 2015 - 13:27:45 • Тема: получение массива с атрибутом Id • Форум: XML и его обработка

Ответов: 7
Просмотров: 1656
Panoptik пишет:
http://phpfaq.ru/debug


А?!
Да это же ответ на все вопросы мироздания.

Что же вы такие дебилы наплодили столько форумов и тем.
Все же просто - см. в логи.

А вопрос актуальный 30 мин - 18 просмотров что дальше????

Как решить задачу?? Что не так в коде???
Где ответ???

Вот так всегда...
myshara Отправлено: 20 Мая, 2015 - 11:05:01 • Тема: получение массива с атрибутом Id • Форум: XML и его обработка

Ответов: 7
Просмотров: 1656
Доброго времени суток!

Есть задача.
Получить максимальный Id.

xml:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <structure>
  3. <group id="gp1"><propertis></propertis></group>
  4. <group id="gp2"><propertis></propertis></group>
  5. <group id="gp..."><propertis></propertis></group>
  6. </structure>


Как получить массив id на php
Делаю так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     $txml = simplexml_load_file('xml/'.$fname);
  2.     $arrayId=array();
  3.     foreach ($txml->group as $group)
  4.     {
  5.         $arrayId[]=$group->attributes('id');
  6.     };


не получается...
myshara Отправлено: 02 Февраля, 2015 - 09:37:58 • Тема: Динамическое подключение диалогов • Форум: Вопросы новичков

Ответов: 1
Просмотров: 168
Доброго времени суток всем форумчанам.

Есть задача.
На странице размещен список.
К элементам списка подключена обработка нажатия.
При нажатии на элемент в блоке <div id="content"> меняется контент.
Связка ajax-php.
Контент по-сути таблицы из БД.
Для каждой таблицы хочу подключать свою форму для ввода и редактирования.
Написал отдельные файлы форм-диалогов: dialog_1.html, dialog_2.html и т.д.

Ajax отправляет запрос на страницу dialog.php
dialog.php - формурует основной контент.
и выполняет функцию:

PHP:
скопировать код в буфер обмена
  1. function includedialog($tb){
  2.         $content='';
  3.         $filename="../public/admin/dialog/dialog_$tb.html";
  4.         if (file_exists($filename)) {$content=file_get_contents($filename);};
  5.         return $content;
  6. }


Но отрабатывает в таком случае только первая форма (т.е. та для которой была нажата ссылка), остальные не подключаются сколько не нажимай всегда только первая.

Пробовал и include и require (_once) разницы нет.
Что делаю не так? Как решить такую задачу.
myshara Отправлено: 18 Июня, 2013 - 09:02:11 • Тема: автоматическое обновление страницы • Форум: Вопросы новичков

Ответов: 2
Просмотров: 259
Доброго времени суток Всем форумчанам.

Я начинающий PHP (js) программист.
При изучении возникла такая задача:
есть - index.php
и есть - json.php

index.php - генерирует на сервере станицу html
json.php - формирует из базы данных массив json и передает в js

index.php - include(json.php)

Вопрос: как сделать так чтобы json.php обновлялся автоматически (каждые 2 сек)
CODE (htmlphp):
скопировать код в буфер обмена
  1. header('Refresh: 2; url='.$_SERVER['PHP_SELF']);

Этот код работает 1 раз если его включить в json.php...
Дальше начинается полная ерунда...

Что я делаю не так?
Как решить эту текущую задачу?

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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB