Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > XML, XSL > Выборка из дерева XML |
Автор: svch 22.7.2010, 22:03 | ||||
Добрый день ! Пишу сейчас сайт на обычном 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 22.7.2010, 22:09 | ||
Справочник здесь http://msdn.microsoft.com/ru-ru/library/ms256177.aspx А нужное тебе выражение здесь
|
Автор: svch 23.7.2010, 09:31 |
Спасибо за указанный вектор. Справочник настолько обширный, но поиск по ancestor уводит меня либо на SQL Server, либо на Visual Studio. Я вижу - Вы хорошо владеете материалом. Не могли бы помочь конкретным примером ? Как в моем случае надо писать ? Буду премного благодарен. С уважением, Сергей. |
Автор: Zloxa 23.7.2010, 09:48 | ||||
вместо
http://www.mizar.dk/XPath/Default.aspx |
Автор: svch 23.7.2010, 11:32 |
Вот, что получаю: Expected token 'eof' found ':'. //Группа[@Код=333]/ancestor-or-self--> |
Автор: diadiavova 23.7.2010, 11:52 | ||||||
В этом справочнике слева есть панель навигации и я дал ссылку на корневой узел справочника. В частности справка по осям здесь http://msdn.microsoft.com/ru-ru/library/ms256456.aspx В ситуации, когда из хмл-файла надо извлечь данные и построить из них какой-то документ, лучше воспользоваться XSLT. Пример программного преобразования здесь http://msdn.microsoft.com/en-us/library/ms762796(VS.85).aspx Чтобы получить ссылку из группы, понадобится такой шаблон
А там, где для конкретного узла надо вставить список ссылок, построенный из родительских групп просто написать
Если решишь оставить как есть, то 4-ю строку кода напиши так
Если я правильно понял смысл кода ессно |
Автор: svch 23.7.2010, 12:06 | ||||
Нет, та же самая ошибка. Вы там, кстати, скобку забыли.
XML у меня вот такой :
|
Автор: diadiavova 23.7.2010, 12:15 | ||
А так?
|
Автор: svch 23.7.2010, 12:21 |
То же самое :( |
Автор: Zloxa 23.7.2010, 12:23 |
сматчит только группы первого уровня, нужно "//Группа" не захватит искомый элемент, надо ancestor-or-self но судя по его парсер не понимает изменение направления поиска по другой оси. Очевидно, он ждет ось только в начале выражения. |
Автор: Zloxa 23.7.2010, 12:55 | ||
|
Автор: svch 23.7.2010, 13:13 | ||||
Спасибо Вам !
Без этой строки не работало. А если необходимо сделать обратный вариант ? Т.е.
если 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 23.7.2010, 13:29 | ||
|
Автор: svch 23.7.2010, 15:16 |
Вот спасибо, добрый человек ! Что почитать мне лучше ? Тут же не справочник нужен, а чтоб разжевали по полочкам. С уважением, Сергей. |
Автор: Zloxa 23.7.2010, 15:32 |
Мне, в свое время показался весьма неплохим http://xml.nsu.ru/. В частнеости там об http://xml.nsu.ru/xpath/xpath_home.xml |
Автор: disketa 15.10.2011, 14:22 |
Подскажите пожалуйста и мне. Есть файл 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 с нужными условиеми? |
Автор: disketa 15.10.2011, 17:50 |
Это с эканомит память, ну тоесть при этом будет загружаться не весь XML файл? И можно этот код привести в рамках моего кода, а то я в XML почти не разбираюсь? |
Автор: diadiavova 15.10.2011, 18:09 | ||||||||
Это вряд ли, но поможет все записать одной строкой.
В рамках твоего кода не совсем понятно, что такое link.item(0) и что именно ты вибираешь. То есть, если это какой-то элемент документа и тебе надо выбрать его дочерние элементы page, то видим как-то так
Если же речь о том, что надо получить все узлы-потомки с таким именем, то выражение приобретет вид
Таким образом ты получишь коллекцию узлов, удовлетворяющий условию. Но для того, чтобы вывести поочередно эту коллекцию в исходящий поток, тебе все равно понадобится цикл, так что в данном простейшем случае ты сэкономишь только на конструкции If. |
Автор: disketa 15.10.2011, 18:24 | ||
Приведу весь код:
Данный код не всегда выполняется либо очень долго выполняется, файл xml около 10Мб, или серверу не хватает памяти, или пока он перебирает все значения (примерно 30000 записей), равные "default.asp" проходит времени больше чем разрешенно на хостинге. Поэтому ищу способ оптимизации, если можно приведённый Вами код, вставьте в мой пожалуйста, всё равно не понял я как это сделать. |
Автор: disketa 15.10.2011, 19:21 | ||
Если делаю так:
Обрабатывается быстро теперь, но выводит первое значение из списка, причём где url не равно 'default.asp' ![]() Направление действий правельное, но условие видимо должно быть иное! Расшифруйте пожалуйста эту строку: .//page[@url = 'default.asp'] что она обозначает, может она выбирает значение каторое не равно, но часть значения имеет строку 'default.asp' ? |
Автор: disketa 15.10.2011, 22:49 |
Всё проблему, решил (была ошибка в название параметров). Спасибо большое, без Вас бы не разобрался с этим XML |
Автор: diadiavova 15.10.2011, 23:02 | ||
Я не уверен, что все правильно понял, да VBscript знаю плохо, но вроде это то, что надо, по крайней мере суть такая, там уж если что сам поправь, гарантировать нормальную работу кода не могу.
|
Автор: disketa 16.10.2011, 11:08 | ||
Вот этот код заработал, как надо:
Большое спасибо за помощь! |
Автор: diadiavova 16.10.2011, 11:16 |
А почему не выбрать линки сразу, как у меня, ведь короче намного получается и код понятнее? |