![]() |
Модераторы: diadiavova |
![]() ![]() ![]() |
|
svch |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Добрый день !
Пишу сейчас сайт на обычном ASP. Сайт будет привязан к файлу XML. Подскажите пож-та, как мне получить следующий результат:
Мне нужно получить список всех родительских групп, т.е. если Request("id") = 111, то нужно: <A HREF='catalog.asp?id=111">Имя1</A> если Request("id") = 333, то нужно: <A HREF='catalog.asp?id=111">Имя1</A> <A HREF='catalog.asp?id=222">Имя2</A> <A HREF='catalog.asp?id=333">Имя3</A> и т.д. Я, признаться, с XML раньше не работал, поэтому и синтаксиса не знаю пока, и все эти шаблоны для меня в диковину. Может подскажет кто ресурс с примерами ? Желательно на русском ? А вот, что я в файле asp пишу:
Направьте на путь, как говорится. Большое спасибо. С уважением, Сергей. |
||||
|
|||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Справочник здесь
http://msdn.microsoft.com/ru-ru/library/ms256177.aspx А нужное тебе выражение здесь
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
svch |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Спасибо за указанный вектор.
Справочник настолько обширный, но поиск по ancestor уводит меня либо на SQL Server, либо на Visual Studio. Я вижу - Вы хорошо владеете материалом. Не могли бы помочь конкретным примером ? Как в моем случае надо писать ? Буду премного благодарен. С уважением, Сергей. |
|||
|
||||
Zloxa |
|
||||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 2 Всего: 161 |
вместо
![]() Это сообщение отредактировал(а) Zloxa - 23.7.2010, 09:54 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
||||
|
|||||
svch |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Вот, что получаю:
Expected token 'eof' found ':'. //Группа[@Код=333]/ancestor-or-self--> Это сообщение отредактировал(а) svch - 23.7.2010, 11:32 |
|||
|
||||
diadiavova |
|
||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
В этом справочнике слева есть панель навигации и я дал ссылку на корневой узел справочника. В частности справка по осям здесь http://msdn.microsoft.com/ru-ru/library/ms256456.aspx В ситуации, когда из хмл-файла надо извлечь данные и построить из них какой-то документ, лучше воспользоваться XSLT. Пример программного преобразования здесь http://msdn.microsoft.com/en-us/library/ms762796(VS.85).aspx Чтобы получить ссылку из группы, понадобится такой шаблон
А там, где для конкретного узла надо вставить список ссылок, построенный из родительских групп просто написать
Если решишь оставить как есть, то 4-ю строку кода напиши так
Если я правильно понял смысл кода ессно Это сообщение отредактировал(а) diadiavova - 23.7.2010, 11:54 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||||
|
|||||||
svch |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Нет, та же самая ошибка. Вы там, кстати, скобку забыли.
XML у меня вот такой :
|
||||
|
|||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
А так?
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
svch |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
То же самое :(
|
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 2 Всего: 161 |
сматчит только группы первого уровня, нужно "//Группа" не захватит искомый элемент, надо ancestor-or-self но судя по его парсер не понимает изменение направления поиска по другой оси. Очевидно, он ждет ось только в начале выражения. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 2 Всего: 161 |
Это сообщение отредактировал(а) Zloxa - 23.7.2010, 12:56 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
svch |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Спасибо Вам !
Без этой строки не работало. А если необходимо сделать обратный вариант ? Т.е.
если Request("id") = 111, то нужно получить все вложенные Группы: <A HREF='catalog.asp?id=111">Имя1</A> <A HREF='catalog.asp?id=222">Имя2</A> <A HREF='catalog.asp?id=333">Имя3</A> <A HREF='catalog.asp?id=444">Имя4</A> <A HREF='catalog.asp?id=555">Имя5</A> С уважением, Сергей. |
||||
|
|||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 2 Всего: 161 |
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
svch |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Вот спасибо, добрый человек !
Что почитать мне лучше ? Тут же не справочник нужен, а чтоб разжевали по полочкам. С уважением, Сергей. |
|||
|
||||
Zloxa |
|
|||
![]() Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 2 Всего: 161 |
Мне, в свое время показался весьма неплохим ресурс. В частнеости там об XPath Это сообщение отредактировал(а) Zloxa - 23.7.2010, 15:38 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка ![]() |
|||
|
||||
disketa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Подскажите пожалуйста и мне.
Есть файл xml с данными в нём содержаться данные, часть из которых надо выводить при определёном условии, делаю так: For i = 0 To xml.getElementsByTagName("page").Length-1 if link.item(0).childNodes(i).getAttribute("url")="default.asp" then Response.write "Вывод данных..." end if next Можно ли не перебором проверять на соответсвие условия, а сделать выборку xml с нужными условиеми? |
|||
|
||||
diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Можно. XPath в твоем случае будет выглядеть примерно так
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||
|
|||||
disketa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Это с эканомит память, ну тоесть при этом будет загружаться не весь XML файл?
И можно этот код привести в рамках моего кода, а то я в XML почти не разбираюсь? Это сообщение отредактировал(а) disketa - 15.10.2011, 17:51 |
|||
|
||||
diadiavova |
|
||||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Это вряд ли, но поможет все записать одной строкой.
В рамках твоего кода не совсем понятно, что такое link.item(0) и что именно ты вибираешь. То есть, если это какой-то элемент документа и тебе надо выбрать его дочерние элементы page, то видим как-то так
Если же речь о том, что надо получить все узлы-потомки с таким именем, то выражение приобретет вид
Таким образом ты получишь коллекцию узлов, удовлетворяющий условию. Но для того, чтобы вывести поочередно эту коллекцию в исходящий поток, тебе все равно понадобится цикл, так что в данном простейшем случае ты сэкономишь только на конструкции If. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||||||
|
|||||||||
disketa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Приведу весь код:
Данный код не всегда выполняется либо очень долго выполняется, файл xml около 10Мб, или серверу не хватает памяти, или пока он перебирает все значения (примерно 30000 записей), равные "default.asp" проходит времени больше чем разрешенно на хостинге. Поэтому ищу способ оптимизации, если можно приведённый Вами код, вставьте в мой пожалуйста, всё равно не понял я как это сделать. Это сообщение отредактировал(а) disketa - 15.10.2011, 18:28 |
|||
|
||||
disketa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Если делаю так:
Обрабатывается быстро теперь, но выводит первое значение из списка, причём где url не равно 'default.asp' ![]() Направление действий правельное, но условие видимо должно быть иное! Расшифруйте пожалуйста эту строку: .//page[@url = 'default.asp'] что она обозначает, может она выбирает значение каторое не равно, но часть значения имеет строку 'default.asp' ? Это сообщение отредактировал(а) disketa - 15.10.2011, 19:22 |
|||
|
||||
disketa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Всё проблему, решил (была ошибка в название параметров).
Спасибо большое, без Вас бы не разобрался с этим XML |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Я не уверен, что все правильно понял, да VBscript знаю плохо, но вроде это то, что надо, по крайней мере суть такая, там уж если что сам поправь, гарантировать нормальную работу кода не могу.
Это сообщение отредактировал(а) diadiavova - 15.10.2011, 23:42 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
disketa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Вот этот код заработал, как надо:
Большое спасибо за помощь! |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
А почему не выбрать линки сразу, как у меня, ведь короче намного получается и код понятнее? -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "XML/XSLT" | |
|
Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась. Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение. Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел Желаем удачи в Вашем деле! Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | XML, XSL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |