| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: X технологии > DOM vs XSLT |
| Автор: Alx 17.5.2007, 16:10 |
| привет. есть большой (или не очень) xml файл. задача: выбрать из него некоторые элементы, слегка отформатировать их и вернуть. но таких задач, предположим много (все немного различаются). чем лучше воспользоваться? средствами DOM или написать XSL-трансформаторы и подгружать их скриптом к xml файлу? на мой взгяд, второе прощё. что скажете? |
| Автор: BuShaRt 18.5.2007, 00:52 |
| Alx, Смотря в каких условиях требуеться форматирование элиментов... |
| Автор: Alx 18.5.2007, 18:29 |
| BuShaRt, можно поподробнее? |
| Автор: WolfON 18.5.2007, 18:47 |
| Тем что быстрее будет работать в данном случае ) Узнать, что быстрее заработает можно только на собственном опыте, хотя по моему парсер DOM будет побыстрее. А можно ведь и сделать все регулярками, если не очень сложный xml |
| Автор: Golda 18.5.2007, 22:26 |
| Добавлю еще пару вариантов. 1) Можно использовать заранее подготовленный класс (по Интернету таких полно валяется) для преобразования xml в массив, изменить значение элементов массива и обратным преобразованием записать xml 2) В случае, если не предвидится изменений структуры xml, а меняются только значения элементов, или изменения структуры незначительны, можно использовать SimpleXML. Если преобразования соответвуют этому типу, считаю вариант предпочтительным. Он позволяет работать с xml наиболее лаконичным и интиутивным способом. Выбор зависит от задачи. Например, при существенных изменениях структуры (предельный случай: на выходе должен получиться не XML вообще), удобнее XSL преобразования. Вариант с DOM, по моему опыту, наиболее громоздкий, и наименее обобщаемый: при самом незначительном изменении задачи приходится писать другую функцию. |
| Автор: Alx 19.5.2007, 00:41 |
| Golda, мне simpleXML вообще не нравится.. неужобная работа с NS, аттрибутами.. но все равно, спасибо |
| Автор: Alx 19.5.2007, 02:26 |
| и как с кириллицей SimpleXML работать я тоже не понял.. |
| Автор: Golda 19.5.2007, 23:36 | ||||||
Alx, SimpleXML подходит, конечно, не для всех задач. Если тебуются серьезные изменения структуры, он не подходит. Но как раз в ситуации
это обычно наиболее удобный вариант. Не могу ничего сказать по поводу NS, пока обходилась без них. Но работу с аттрибутами я неудобной назвать не могу. Разве это не наиболее лаконичный вариант:
А по поводу кириллицы, работайте в UTF-8. При любом методе работы с XML меньше проблем, когда работаешь с Unicode. Хотя я согласна, что DOM позволяет программисту что-то рассказать о своей кодировке, все равно, если это не UTF-8, c национальными алфавитами жди проблем |
| Автор: Alx 20.5.2007, 08:55 | ||||
| Golda, Спасибо.. а как мне русские слова то вывести?
возвращает ошибки:
|
| Автор: Golda 20.5.2007, 18:25 |
| Можете использовать iconv() (только убедитесь, что у Вас установлен этот extention), а еще проще, сохраните свой скрипт (файл) в UTF-8 |
| Автор: Alx 22.5.2007, 13:39 | ||
спасибо, но тогда при присутствии строки header('Content-Type:application/xml'); возникает такая ошибка:
при кодировке ANSI - её нет.. Добавлено @ 13:41 Denwer+PHP5 |
| Автор: Golda 22.5.2007, 14:04 |
| Эта ошибка не имеет отношения к XML. Просто у Вас в файле до <?php остался какой-то пробел, табуляция или перевод строки. Поэтому, когда Вы пытаетесь вызывать посылать заголовок (неважно какой) с помощью header(), он ругается, что вывод уже начался и больше заголовки послать не получится. Проверьте, что до открывающего тега <?php ничего нет Упс, не дочитала, что в кодировке ANSI этой проблемы не возникает. Очень странно. С таким я не сталкивалась. Проверьте на всякий случай, что <?php весь набран латиницей. |
| Автор: Golda 22.5.2007, 22:21 |
| Alx, я нашла источник этой пролемы. Она появляется, если используется скрипт сохраняется в стандартный UTF-8, который использует byte order mark (BOM) в начале файла (подробнее о нем можете прочитать здесь http://unicode.org/faq/utf_bom.html). Эти лишние байты и воспринимаются интерпритатором php как начало вывода. Нужно сохранять в UTF-8 без BOM. PS. Спасибо, что навели меня на интересную информацию. Я сама обычно использую iconv и на подобный момент не натыкалась |
| Автор: Alx 23.5.2007, 01:57 |
ох, а как это? на сайте я что-то не нашел.. до того я сохранял в Блокноте (там только ANSI, Unicode, Unicode Big Endian и UTF-8) |
| Автор: Golda 23.5.2007, 17:02 |
| Ну, в Notepad не очень удобно работать. Без подсветки, подсказок, автодополонения... Мне сложно посоветовать что-либо под Windows. На работе есть возможность использовать ZendStudio под Linux. Знакомые, которые работают с Windows, советуют http://notepad-plus.sourceforge.net. Говорят, его можно удобно настроить под свои нужды. Во всяком случае, я проверила, что там можно выбрать кодировку UTF-8 без BOM (проверяла в версии 4.1.2). Тем более, что он бесплатный. Или поищите любой другой редактор, поддерживающий такую возможность |
| Автор: Alx 23.5.2007, 21:25 |
| я всю жизнь в блокноте писал, а с недавнего времени на http://delphist.com/GoldenPen.html нашего Vit`а перешёл в любом случае, спасибо большое за ссылку и за помощь! |