LINUX.ORG.RU

jQuery + PHP для работы с DOM?


0

0

По долгу службы приходится много работать с XML с помощью DOM-функций в PHP. В то же время, на стороне клиента широко использую jQuery. И всё больше задумываюсь о разработке средства, аналогичного jQuery, но для PHP, чтобы удобнее было оперировать XML-данными из быдлоязыка.

Например, так:

jQuery::load("file.xml")->find("item[@type='one']")->attr('type', 'two')->save();

В принципе, теоретически это возможно, что доказывает библиотека jQuery-PHP, но у неё несколько другое предназначение. Мне же требуется работать с любыми XML документами, в том числе изменять их.

Может подобное решение уже существует или у кого-то есть собственные наработки?

★★★
Ответ на: комментарий от anonymous

Всё равно не догоняю как XSLT может упростить работу с DOMом. Да и что такое XSLT-наложения? Может, преобразования или трансформации? Хотя, есть у меня один механизм, в котором XSLT реально круто помогает - это отрисовка формы по XML-схеме с валидацией.

По сабжу - начал писать либу, назвал qJerry. Уже умеет each(), eq(), get(), size(), children(), find(), next(). Когда доведу до ума - выложу.

theSoul ★★★
() автор топика
Ответ на: комментарий от anonymous

> ваши велосипеды давно изобретены

> c:braing явно предлагает сначала думать...

Прежде чем думать, следует _внимательно_ читать условие задачи. Ваши мануалы давно забиты и выкурены.

Для танкистов диктую большими буквами: нужно средство, которое позволит
использовать jQuery-like подход при работе с XML в PHP.
То есть, эдакий DOM-wrapper.

Для особо просветлённых: чтобы вместо

$dom = new DOMDocument;
$dom->load('file.xml');
foreach($dom->getElementsByTagName('item') as $item) {
    if($item->getAttribute('type') == 'one') {
        $item->setAttribute('type', 'two');
    }
}
$dom->save('file.xml');

можно было написать:

jQuery::load('file.xml')->find("item[@type='one']")->attr('type', 'two')->save();

Покажите, где это есть в мануале PHP?

theSoul ★★★
() автор топика
Ответ на: комментарий от theSoul

поздравляю, вы нашли правильный мануал. а теперь еще раз почитайте его на предмет обьектов, их методов, и того, что они возвращают.

anonymous
()
Ответ на: комментарий от theSoul

я как минимум могу сократить ваш пример до такого:
foreach ( DOMXPath(DOMDocument::LoadXml('file.xml'))->query("item[@type='one']") as $item)
$item->setAttribute('type','two');

anonymous
()
Ответ на: комментарий от theSoul

зеркало, зеркало...

вы до сих пор не научились полностью использовать то, что есть, а уже лезете со своими костылями.

anonymous
()
Ответ на: комментарий от anonymous

> DOMXPath(DOMDocument::LoadXml('file.xml'))->query("item[@type='one']") as $item) $item->setAttribute('type','two');

> вы до сих пор не научились полностью использовать то, что есть, а уже лезете со своими костылями.

Чья бы корова мычала. Вы на свой код посмотрите: он же нерабочий. Забыли, что DOMXPath - это класс, а не функция, а LoadXML() создаёт DOM-объект из строки, а не из файла. К тому же:

Strict Standards: Non-static method DOMDocument::load() should not be called statically

О том, что вы о jQuery ни сном ни духом, я вообще молчу.

theSoul ★★★
() автор топика
Ответ на: комментарий от theSoul

> DOMDocument::load() should not be called statically именно поэтому я и использовал не его, а loadXML

добавляем new и file_get_contents - и код рабочий.

а о моих знаниях о jQuery не вам судить, ага

я прекрасно понимаю что вы хотите сделать, я просто не вижу в этом смысла.

сделаете - молодец. не сделаете - никто сожалеть, думаю, не будет, нужный функционал и так есть.

anonymous
()
Ответ на: комментарий от anonymous

> я прекрасно понимаю что вы хотите сделать, я просто не вижу в этом смысла.

Вот и я, сколько юзал PHP 5-ой ветки, не видел смысла. Наличия вменяемой поддержки XML на основе libxml2 и XSLT на основе libxslt уже было достаточно для счастья по сравнению с PHP4 и его убогими DOM XML и Sablotron. По крайней мере, этим стало удобно пользоваться.

Хочется, чтобы пользоваться было не только удобно, но и приятно (-;

theSoul ★★★
() автор топика
Ответ на: комментарий от anonymous

> сделаете - молодец. не сделаете - никто сожалеть, думаю, не будет, нужный функционал и так есть.

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

theSoul ★★★
() автор топика
Ответ на: комментарий от anonymous

> а вы на чем пишете? если классом на пхп - уверены что PEAR нету подходящего решения?

Гуглил. Единственное, что нашёл - это библиотека jQuery-PHP (http://jquery.hohli.com/), но она предназначена не для работы с произвольными документами, а для расширения возможностей взаимодействия PHP <=> JavaScript посредством AJAX.

Пишу классом на PHP. Когда будет готово, отдам в PEAR, если возьмут (-:

theSoul ★★★
() автор топика
Ответ на: комментарий от theSoul

> jQuery::load('file.xml')->find("item[@type='one']")->attr('type', 'two')->save();

Мда... Глобально и надежно. А что если файла 'file.xml' не существует? А если type='one' не встречается? Ошибки обрабатывать нафиг никому не надо... Зачем еще сильнее усложнять жизнь тому, кто будет поддерживать код после вашего увольнения? :)

anonymous
()
Ответ на: комментарий от theSoul

>Вы идиот или просто некомпетентны?

Ну ты нашел конечно место, где спрашивать совета, и еще удивляешься :)

mares
()
Ответ на: комментарий от mares

> Ну ты нашел конечно место, где спрашивать совета, и еще удивляешься :)

Надо было в Development тему заводить. В пень все советы, либа почти готова. Осталось 5 методов дописать.

theSoul ★★★
() автор топика
25 октября 2008 г.
Ответ на: комментарий от theSoul

получилось дописать ? Можно посмотреть? Столкнулся сейчас с необходимостью работать с xml под php и стандартные средства не очень нравятся. Подход jQuery был бы удобнее.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.