Прочитать XML-файл локально
Всем привет. Есть задача загрузить xml, чтобы в дальнейшем распарсить его, но так, чтобы это было кроссбраузерно, и чтоб браузеры не ругались. пробовал так:
$(document).ready(function() { $.ajax({ type: "GET", url: "jquery_xml.xml", dataType: "xml", success: parseXml }); }); но Chrome, например, ругается (нужно запускать с ключом --allow-file-access-from-files). Ну и вообще, как бы вы решали данную задачу, с учётом, что это должно уметься делаться локально, т.е.: человек скачивает архив, в архиве не должно быть никаких, exe'шников... |
Если человек что-то скачал и может это запустить, зачем использовать HTML + JS? Можно и .exe'шник приложить.
С другой стороны, зачем человеку скачивать то, что он всё равно в браузере откроет? Насколько мне известно, нет нормальных и кроссбраузерных способов работы с локальной ФС. |
Цитата:
Требование, чтоб и локально было, и удалённо. |
Попробуйте FileAPI. Не обещаю, что поможет, но вдруг.
|
oyaebunterkrah,
Вродь на хабре была статья, как локально работать с браузером Поищу - Вот, http://habrahabr.ru/post/138054/ вродь были и еще хабр статьи подобных реализаций |
Цитата:
Но мой опыт работы в Опере, Произвольно сложный контент страницы Давим - Файл - Сохранить как - С изображениями, кидаем в папку с англоязычным названием - открывается во всех браузерах, можно и удалённо, папка легко перемещается с компа на комп ....или запуск с флешки |
Цитата:
|
oyaebunterkrah,
По-моему нун сначало определицо с системой взаимодействия Локального Хоста и удаленного, Наиболее короткий по реализации метод, Взаимодействовие Пользователя всегда с локальным хостом, А отдельный интерфейс: проверка новизны XML страницы от сервера и добавок в XML контента пользователей и переобновление данной локальной страницы Либо забить пока на локал, *но на ином этапе подключить локальный Вариант сложнее |
Цитата:
|
oyaebunterkrah,
Объём XML страницы/страниц примерн известен ? |
Да, максимум 500-600 строк.
|
oyaebunterkrah,
Собственно посколь завис пока на window.name - пробуйте использовать сохранение в нём... В отличие от куков, не страдает от очистки кеша А распарсить текст достаточно просто, главное иметь текст страницы |
Можно попробовать вставить iframe с этим xml файлом и получить содержимое.
(Кстати, почему аякс распространился тогда, когда появился XHR? Можно было ведь делать тупо на айфрейме.) |
Цитата:
Парс в jQuery две строки, хотя нун на код глянуть |
решил хранить структурированный xml в каком-нибудь тэге прям в html, например:
<p id="data"> <?xml version="1.0" encoding="utf-8" ?> <RecentTutorials> <Tutorial author="The Reddest"> <Title>Silverlight and the Netflix API</Title> <Categories> <Category>Tutorials</Category> <Category>Silverlight 2.0</Category> <Category>Silverlight</Category> <Category>C#</Category> <Category>XAML</Category> </Categories> <Date>1/13/2009</Date> </Tutorial> </RecentTutorials> </p> а потом делать: var xmlData = $(#data).html(); var xmlDOM = $.parseXML(xmlData); $(xmlDOM).find(...); но, команда $(#data).html() почему-то ломает структуру xml, после чего $(xmlDOM).find(...) ничего не может найти. а вот если делать так: var xmlString = '<?xml version="1.0" encoding="utf-8" ?> <RecentTutorials> <Tutorial author="The Reddest"> <Title>Silverlight and the Netflix API</Title> <Categories> <Category>Tutorials</Category> <Category>Silverlight 2.0</Category> <Category>Silverlight</Category> <Category>C#</Category> <Category>XAML</Category> </Categories> <Date>1/13/2010</Date> </Tutorial> <Tutorial author="The Hairiest"> <Title>Cake PHP 4 - Saving and Validating Data</Title> <Categories> <Category>Tutorials</Category> <Category>CakePHP</Category> <Category>PHP</Category> </Categories> <Date>1/12/2009</Date> </Tutorial> <Tutorial author="The Tallest"> <Title>Silverlight 2 - Using initParams</Title> <Categories> <Category>Tutorials</Category> <Category>Silverlight 2.0</Category> <Category>Silverlight</Category> <Category>C#</Category> <Category>HTML</Category> </Categories> <Date>1/6/2009</Date> </Tutorial> <Tutorial author="The Fattest"> <Title>Controlling iTunes with AutoHotkey</Title> <Categories> <Category>Tutorials</Category> <Category>AutoHotkey</Category> </Categories> <Date>12/12/2008</Date> </Tutorial> </RecentTutorials>'; var xmlDOM = $.parseXML(xmlString ); т.е. запихнуть всё в одну строку без пробелов и табуляций, то парсится всё нормально, и поиск работает. хотелось бы узнать, насколько логично так делать, и, если это приемлемый вариант, то каким образом можно получить содержимое тэга <p> и убрать из него все пробелы и табуляции, для дальнейшей обработки? |
oyaebunterkrah,
Обычно трюк такой: <div id=Storage></div> <script type="text/javascript"> var Data='\n\ <?xml version="1.0" encoding="utf-8" ?>\n\ <RecentTutorials>\n\ <Tutorial author="The Reddest">\n\ <Title>Silverlight and the Netflix API</Title>\n\ <Categories>\n\ <Category>Tutorials</Category>\n\ <Category>Silverlight 2.0</Category>\n\ <Category>Silverlight</Category>\n\ <Category>C#</Category>\n\ <Category>XAML</Category>\n\ </Categories>\n\ <Date>1/13/2009</Date>\n\ </Tutorial>\n\ '; *!* var Storage=$("#Storage").remove() Storage.html(Data); */!* alert(Storage.html()) </script> |
а что даёт "\n\"?
|
oyaebunterkrah,
Да это не обязательно - Вы же Data подгружаете - а я запихнул её в строковую переменную Эт перевод строки и указание на неразрывность строки |
oyaebunterkrah,
В принципе аналогичную методу можно проделать и с открытием модального окна и запихиванием туда кода: popup1 = window.open("","popData","height=1,width=1") popup1.document.write(Data) popup1.document.close() C последующим считыванием |
ну ок. а не подскажешь, как можно работать со считанным xml? я имею в виду добавлять, удалять, редактировать узлы..? может, библиотечка есть уже какая..?
|
Цитата:
В Ие 6-7 - не наю(а может и 8 Но вроде компутер банковский (или произвольный ? <div id=Storage></div> <script type="text/javascript"> var Data='\n\ <?xml version="1.0" encoding="utf-8" ?>\n\ <RecentTutorials>\n\ <Tutorial author="The Reddest">\n\ <Title>Silverlight and the Netflix API</Title>\n\ <Categories>\n\ <Category>Tutorials</Category>\n\ <Category>Silverlight 2.0</Category>\n\ <Category>Silverlight</Category>\n\ <Category>C#</Category>\n\ <Category>XAML</Category>\n\ </Categories>\n\ <Date>1/13/2009</Date>\n\ </Tutorial>\n\ '; var Storage=$("#Storage").remove() Storage.html(Data); *!* Storage.find("Category:first").append(" Добавка") Storage.find("Category").each(function (){ alert($(this).html()) }); */!* </script> |
Можно покопать в сторону TiddlyWiki, у них в коде описана технология загрузки данных из локального файла. Но там есть нюансы - используемая технология не позволяет работать с русскими буквами (поддерживается, кажется, только 1250 кодировка, поэтому данные там кодируют... )
|
Цитата:
ага, банковский. чё-т когда делаю так, как ты написал: Storage.find("Category:first").append(" Добавка"); Storage.find("Category").each(function (){alert($(this).html()}); вылетает jquery. а если меняю $(this).html() на $(this).text(), то всё ок. |
oyaebunterkrah,
Ну наверно техт правильнее... Вас Долго не было - задачка затухла Ксать еcли банковский - мож стоит установить Silverlight 2.0 (Ток браузер не Опера, траблы там с оным, зато ИЕ поддержано) и не мучацо ? |
Цитата:
блин, ну должны же быть прозрачные методы добавления, удаления, редактирования... |
Цитата:
append() remove() replaceWith();? И потом - Куда вы в итоге хотите деть отредактированную страницу и вообще - зачем она нужна ? |
Цитата:
|
Ну как её оживить, если ответы как с КВЖД (Китайско-Восточная железная дорога )
посколь ежели jQuery не идёт нун поискать другой способ... |
Цитата:
|
Цитата:
window.name="str" Cтрока может быть до двух мегов window.name подгружаете единожды, основная задача - работать с базой на одной вкладке, посколь переменная лишь для вкладки |
Цитата:
Все методы jQuery работы с тегами в новых браузерах - вродь должны работать Просто привёл сходу типовые, наверно должно и работа с классом поддерживаться - актуально для идентичных тегов (хотя легко обойти более длинным кодом-перебора |
а какая разница хранить в обычной переменной, которая будет инициализироваться на $(document).ready или в windows.name?
|
oyaebunterkrah,
Вы её теряете при закрытии браузера, или смены страницы - тут она сохраняется и при выключении машины *Хотя - возможно, в целях безопасности Вам это как раз и надо не сохранение данных -ни наю ограничение одно - вкладка должна быть той же... но подгрузка - будет реже |
для локальной версии не критично, так как всё будет на одной стр. происходить. а вообще буду иметь в виду, спасибо.
Цитата:
|
oyaebunterkrah,
Окна вкладок сохраняются в файл в браузерах |
ясно, спасибо! а сам вообще на чём по большей части прогаешь?
|
Цитата:
Проверил во всех браузерах (Кроме ИЕ)- у меня в норме http://hostjs-mybb2011.narod.ru/oyaebunterkrah2.htm |
Цитата:
|
Часовой пояс GMT +3, время: 02:09. |