Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Вниз

XML с дочерьми ..   Найти похожие ветки 

 
timekiller ©   (2008-11-10 11:30) [0]

 if Assigned(XMLd.ChildNodes) then
 for a1:=0 to XMLd.ChildNodes.Count-1 do
 if Assigned(XMLd.ChildNodes[a1].ChildNodes) then
 for a2:=0 to XMLd.ChildNodes[a1].ChildNodes.Count-1 do
 if Assigned(XMLd.ChildNodes[a1].ChildNodes[a2].ChildNodes) then
 for a3:=0 to XMLd.ChildNodes[a1].ChildNodes[a2].ChildNodes.Count-1 do
 if Assigned(XMLd.ChildNodes[a1].ChildNodes[a2].ChildNodes[a3].ChildNodes) then
 for a4:=0 to XMLd.ChildNodes[a1].ChildNodes[a2].ChildNodes[a3].ChildNodes.Count-1 do


Пожалуйста, Подскажите как оптимизировать это х..
(Узнать не только количество узлов, но и количество, блин, дочерности узла)


 
Поросенок Винни-Пух ©   (2008-11-10 11:36) [1]

циклы, рекурсия, функции....


 
timekiller ©   (2008-11-10 11:41) [2]

это понятно
есть допустим ChildNodes.Count-1 - цикл по "У" сам напрашивается
а цикл по "Х" как сделать, у кого узнать Count?


 
Поросенок Винни-Пух ©   (2008-11-10 12:02) [3]

циклы делаются одинаково


 
timekiller ©   (2008-11-10 12:17) [4]


<name>
 <Containing>
   <lot>
     <bla>
       <blabla>
         <blablalalaaaaaa>
           <itsTheEnd>
           </itsTheEnd>
         </blablalalaaaaaa>
       </blabla>
     </bla>
   </lot>
 </Containing>
</name>
............

Как определить номер вложенной ветки <itsTheEnd>? Может быть ..  это называется номер вложенности?

ps: циклы делаются одинаково, но я спросил не про циклы а про Count для цикла, ну например если очень грубо:
StringGrid1.RowCount = XmlDocument1.ChildNodes.Count
StringGrid1.ColCount = ?


 
Palladin ©   (2008-11-10 12:26) [5]

и что же в этом XML является col"ами ?


 
timekiller ©   (2008-11-10 12:37) [6]

1<1>
2  <2>
3    <3>
4      <4>
5        <5>
6          <6>
6          </6>
5        </5>
4      </4>
3    </3>
2  </2>
1</1>

Количество вложенностей, не? у 1 - 5 вложенностей, у 4 - 2


 
timekiller ©   (2008-11-10 12:37) [7]

1<1>
2  <2>
3    <3>
4      <4>
5        <5>
6          <6>
6          </6>
5        </5>
4      </4>
3    </3>
2  </2>
1</1>

Количество вложенностей, не? у 1 - 5 вложенностей, у 4 - 2


 
timekiller ©   (2008-11-10 12:45) [8]

Подскажите тогда лучше как сделать поиск по нодам? Есть ли какие-нибудь варианты перемещений по координатам или по путям XPath?

Есть ли функция наподобие:

if searchnode(XMLDocument1).name="2я_нода_в_корне" then showmessage("1") else
if searchnode(XMLDocument1).name="139я_нода_в_14узле" then showmessage("5");


?


 
Поросенок Винни-Пух ©   (2008-11-10 12:48) [9]

конечно есть. xpath он и есть xpath.


 
timekiller ©   (2008-11-10 12:55) [10]

Хотя так влом работать с XPath, строками и pos и чтобы найти чтото..


 
Поросенок Винни-Пух ©   (2008-11-10 12:56) [11]

а навигационный метод это конечно же не влом. это зашибись.
чо тогда за вопросы?


 
timekiller ©   (2008-11-10 13:24) [12]

Все спасибо отбой, на другом форуме подсказали :)


 
brother ©   (2008-11-10 13:32) [13]

> Все спасибо отбой,

а была тревога? ;)


 
timekiller ©   (2008-11-10 15:22) [14]

не, у вас тревоги никогда не бывает :D это понятно
а вот то что я хотел найти (другим в помощь):


function GetNodeValue(XMLn:IXMLNode;NodeName:String):string;
var i,j:integer;
begin
 if Assigned(XMLn.ChildNodes) then
 for i:=0 to XMLn.ChildNodes.Count-1 do
 if (XMLn.ChildNodes[i].NodeName=NodeName) then
 begin
   Result:=XMLn.ChildNodes[i].Text;
 end else
 if Assigned(XMLn.ChildNodes[i].ChildNodes) then
 Result:=GetNodeValue(XMLn.ChildNodes[i],NodeName);
end;


 
Поросенок Винни-Пух ©   (2008-11-10 15:59) [15]

изврату ребенка научили. за такое надо давать как за растление малолетних.


 
timekiller ©   (2008-11-10 16:08) [16]

Ну пришлось делать конвертер того парсера, программёр которого люто ненавидел xsd
Предложил бы не изврат, вместо слова "рекурсия", или еще сам ребёнак? :D


 
Поросенок Винни-Пух ©   (2008-11-10 16:11) [17]

Ну пришлось делать конвертер того парсера, программёр которого люто ненавидел xsd

В итоге получилось:
Один извращенец правит работу другого извращенца.


 
timekiller ©   (2008-11-10 16:21) [18]

Мне продолжить с тобой по душам или предложить тебе всетаки не извращаться надо мной, а привести 1 какой-нибуть аргумент? :)


 
Поросенок Винни-Пух ©   (2008-11-10 16:28) [19]

Зачем тебе аргумент если ты и так счастлив?


 
timekiller ©   (2008-11-10 16:50) [20]

ну чет хочешь доказать - а мне интересно, я ж вроде учусь



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.042 c
2-1226151544
аврам
2008-11-08 16:39
2008.12.21
потоки


2-1226181426
Scary
2008-11-09 00:57
2008.12.21
StringGrid и полоса прокрутки


4-1202310065
lead-in
2008-02-06 18:01
2008.12.21
"Шифровка по Виндусовски"


10-1150442838
RomanH
2006-06-16 11:27
2008.12.21
Программно задать OLE-сервер


15-1224490743
Добежал
2008-10-20 12:19
2008.12.21
Vista home and Fast User Switching





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский