Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DOM vs XSLT, небольшие преобразования 
:(
    Опции темы
Alx
Дата 17.5.2007, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



привет.

есть большой (или не очень) xml файл. задача: выбрать из него некоторые элементы, слегка отформатировать их и вернуть. но таких задач, предположим много (все немного различаются). чем лучше воспользоваться? средствами DOM или написать XSL-трансформаторы и подгружать их скриптом к xml файлу? на мой взгяд, второе прощё. что скажете?


--------------------
PM MAIL WWW ICQ   Вверх
BuShaRt
Дата 18.5.2007, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Alx
Смотря в каких условиях требуеться форматирование элиментов...
PM MAIL   Вверх
Alx
Дата 18.5.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



BuShaRt
можно поподробнее?


--------------------
PM MAIL WWW ICQ   Вверх
WolfON
Дата 18.5.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Тем что быстрее будет работать в данном случае )
Узнать, что быстрее заработает можно только на собственном опыте, хотя по моему парсер DOM будет побыстрее.
А можно ведь и сделать все регулярками, если не очень сложный xml
PM MAIL ICQ   Вверх
Golda
Дата 18.5.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 5
Всего: 42



Добавлю еще пару вариантов. 

1) Можно использовать заранее подготовленный класс (по Интернету таких полно валяется) для преобразования xml в массив, изменить значение элементов массива и обратным преобразованием записать xml

2) В случае, если не предвидится изменений структуры xml, а меняются только значения элементов, или изменения структуры незначительны, можно использовать SimpleXML. Если преобразования соответвуют этому типу, считаю вариант предпочтительным. Он позволяет работать с xml наиболее лаконичным и интиутивным способом.

Выбор зависит от задачи. Например, при существенных изменениях структуры (предельный случай: на выходе должен получиться не XML вообще), удобнее XSL преобразования. Вариант с DOM, по моему опыту, наиболее громоздкий, и наименее обобщаемый: при самом незначительном изменении задачи приходится писать другую функцию. 
 



--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
Alx
Дата 19.5.2007, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



Golda
мне simpleXML вообще не нравится.. неужобная работа с NS, аттрибутами..
но все равно, спасибо smile


--------------------
PM MAIL WWW ICQ   Вверх
Alx
Дата 19.5.2007, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



и как с кириллицей SimpleXML работать я тоже не понял..


--------------------
PM MAIL WWW ICQ   Вверх
Golda
Дата 19.5.2007, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 5
Всего: 42



Alx, SimpleXML подходит, конечно, не для всех задач. Если тебуются серьезные изменения структуры, он не подходит. Но как раз в ситуации

Цитата

выбрать из него некоторые элементы, слегка отформатировать их и вернуть


это обычно наиболее удобный вариант.

Не могу ничего сказать по поводу NS, пока обходилась без них. Но работу с аттрибутами я неудобной назвать не могу. Разве это не наиболее лаконичный вариант:

Код

<?xml version="1.0" standalone="yes"?>
<book>
    <chapter>Odessa</chapter>
    <chapter attr1="val1" attr2="val2">Ariel</chapter>
    <chapter>Ramat-Gan</chapter>
</book>



Код

$xml = simplexml_load_file('test.xml');
echo  $xml->chapter[1]['attr1'] . '<br/>';
$xml->chapter[1]['attr2'] = 'new val';
$xml->chapter[1]['attr3'] = 'there was no such attribute before';
$xml->chapter[2] = "Kiev";
echo htmlspecialchars($xml->asXML());


А по поводу кириллицы, работайте в UTF-8. При любом методе работы с XML меньше проблем, когда работаешь с Unicode. Хотя я согласна, что DOM позволяет программисту что-то рассказать о своей кодировке, все равно, если это не UTF-8, c национальными алфавитами жди проблем

Это сообщение отредактировал(а) Golda - 19.5.2007, 23:38


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
Alx
Дата 20.5.2007, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



Golda
Спасибо.. а как мне русские слова то вывести?

Код

<?php
$r = simplexml_load_string("<root>привет!</root>");
echo $r->asXML();
?>


возвращает ошибки:

Цитата

Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xEF 0xF0 0xE8 0xE2 in h:\home\dev\www\xml\_test\php5\encoding.php5 on line 3

Warning: simplexml_load_string() [function.simplexml-load-string]: <root>привет!</root> in h:\home\dev\www\xml\_test\php5\encoding.php5 on line 3

Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in h:\home\dev\www\xml\_test\php5\encoding.php5 on line 3

Fatal error: Call to a member function asXML() on a non-object in h:\home\dev\www\xml\_test\php5\encoding.php5 on line 4



--------------------
PM MAIL WWW ICQ   Вверх
Golda
Дата 20.5.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 5
Всего: 42



Можете использовать iconv() (только убедитесь, что у Вас установлен этот extention), а еще проще, сохраните свой скрипт (файл) в UTF-8 


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
Alx
Дата 22.5.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



Цитата(Golda @  20.5.2007,  18:25 Найти цитируемый пост)
а еще проще, сохраните свой скрипт (файл) в UTF-8  

спасибо, но тогда при присутствии строки

header('Content-Type:application/xml');

возникает такая ошибка:

Цитата

Warning: Cannot modify header information - headers already sent by (output started at h:\home\dev\www\ajax\_own\tourfirm\sources\smartselect.php:1) in h:\home\dev\www\ajax\_own\tourfirm\sources\smartselect.php on line 5


при кодировке ANSI - её нет..

Добавлено @ 13:41
Denwer+PHP5

Это сообщение отредактировал(а) Alx - 22.5.2007, 13:41


--------------------
PM MAIL WWW ICQ   Вверх
Golda
Дата 22.5.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 5
Всего: 42



Эта ошибка не имеет отношения к XML. Просто у Вас в файле до <?php остался какой-то пробел, табуляция или перевод строки. Поэтому, когда Вы пытаетесь вызывать посылать заголовок (неважно какой) с помощью header(), он ругается, что вывод уже начался и больше заголовки послать не получится. Проверьте, что до открывающего тега <?php ничего нет


Упс, не дочитала, что в кодировке ANSI этой проблемы не возникает. Очень странно. С таким я не сталкивалась. Проверьте на всякий случай, что <?php весь набран латиницей.

Это сообщение отредактировал(а) Golda - 22.5.2007, 14:42


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
Golda
Дата 22.5.2007, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 5
Всего: 42



Alx, я нашла источник этой пролемы. Она появляется, если используется скрипт сохраняется в стандартный UTF-8, который использует byte order mark (BOM) в начале файла (подробнее о нем можете прочитать здесь http://unicode.org/faq/utf_bom.html). Эти лишние байты и воспринимаются интерпритатором php как начало вывода. Нужно сохранять в UTF-8 без BOM.

PS. Спасибо, что навели меня на интересную информацию. Я сама обычно использую iconv и на подобный момент не натыкалась  smile 


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
Alx
Дата 23.5.2007, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



Цитата(Golda @  22.5.2007,  22:21 Найти цитируемый пост)
Нужно сохранять в UTF-8 без BOM.

ох, а как это? на сайте я что-то не нашел.. до того я сохранял в Блокноте (там только ANSI, Unicode, Unicode Big Endian и UTF-8)


--------------------
PM MAIL WWW ICQ   Вверх
Golda
Дата 23.5.2007, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 5
Всего: 42



Ну, в Notepad не очень удобно работать. Без подсветки, подсказок, автодополонения... Мне сложно посоветовать что-либо под Windows. На работе есть возможность использовать ZendStudio под Linux. Знакомые, которые работают с Windows, советуют Notepad++. Говорят, его можно удобно настроить под свои нужды. Во всяком случае, я проверила, что там можно выбрать кодировку UTF-8 без BOM (проверяла в версии 4.1.2). Тем более, что он бесплатный. Или поищите любой другой редактор, поддерживающий такую возможность

Это сообщение отредактировал(а) Golda - 23.5.2007, 17:03


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: X технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0572 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.