Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2013, 06:09   #1
Spot
Пользователь
 
Аватар для Spot
 
Регистрация: 04.06.2008
Сообщений: 32
По умолчанию XML DOM Поиск элемента по значению

Есть такой файл:
Код:
<Package>
<Object ID_Object="1">
	<Complex_Realty>
		<ConditionalNumber>14-14-06/006/2011-535</ConditionalNumber>
	</Complex_Realty>
</Object>
<Object ID_Object="2">
	<Complex_Realty>
		<ConditionalNumber>14-14-06/006/2011-530</ConditionalNumber>
	</Complex_Realty>
</Object>
<Object ID_Object="3">
	<Complex_Realty>
		<ConditionalNumber>14-14-06/006/2011-532</ConditionalNumber>
	</Complex_Realty>
</Object>
<Object ID_Object="4">
	<Complex_Realty>
		<ConditionalNumber>14-14-06/006/2011-531</ConditionalNumber>
	</Complex_Realty>
</Object>
<Object ID_Object="5">
	<Complex_Realty>
		<ConditionalNumber>14-14-06/006/2011-534</ConditionalNumber>
	</Complex_Realty>
</Object>
<Object ID_Object="6">
	<Complex_Realty>
		<ConditionalNumber>14-14-06/006/2011-533</ConditionalNumber>
	</Complex_Realty>
</Object>
</Package>
Как найти ид объекта по заданному усл. номеру (объектов несколько десятков тысяч)
Spot вне форума Ответить с цитированием
Старый 21.02.2013, 07:58   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

В общем случае - перебирая по очереди все объекты.
Если есть уверенность, что объекты по данному полю упорядочены, то можно попытаться воспользоваться бинарным поиском.
s-andriano вне форума Ответить с цитированием
Старый 21.02.2013, 08:40   #3
Spot
Пользователь
 
Аватар для Spot
 
Регистрация: 04.06.2008
Сообщений: 32
По умолчанию

т.е. готовой функции нет?
Именно не упорядочены ни по ид, ни по номеру
Теперь такой вопрос.
Я вот попытался так:
Код:
    kol:=Root.ChildNodes.Length;
    for i:=0 to kol-1 do
    begin
      Node:=Root.ChildNodes[i].childNodes[0].childNodes[0];
      if Node.nodename='ConditionalNumber' then
      begin
        s:=Node.text;
        if s='номеру'
        begin
          root.removeChild(node.parentNode.parentNode);
        end;
      end;
    end;
но оказывается если удалю, то количество нодов уменьшается, поэтому в конце цикла выходит ошибка.
Как можно в данном случае использовать конструкци типа while not(eof()) do?
Spot вне форума Ответить с цитированием
Старый 21.02.2013, 09:50   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

XPath
Код:
node:=Root.selectSingleNode('Package/Object/Complex_Realty/ConditionalNumber="14-14-06/006/2011-534");
node.parent.parent.getAttribute('ID_Object')
или selectNodes
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
XML Поиск элемента по значению атрибуту и запись в новый файл Rastamans C# (си шарп) 0 15.12.2012 22:34
Найти количество элементов стоящих после максимального по значению элемента RealUnited Паскаль, Turbo Pascal, PascalABC.NET 3 05.12.2012 20:07
Найти среднее значение элементов и номер элемента массива, ближайшего к среднему по значению Romashka) Общие вопросы C/C++ 1 06.11.2012 18:55
программа, которая по заданному значению соответствующего элемента вычисляла бы значение всех остальных элементов. Axsel145 Помощь студентам 0 24.09.2011 23:28
парcить XML без DOM (php) termes PHP 2 08.06.2010 06:18