Na wstępie: Nie mam ochoty na kolejne przepychanki, więc proszę personalnie 123oho o powstrzymanie się ze swoimi zgryźliwymi uwagami, oraz wszystkich pozostałych o wybujałym ego o przystopowanie. Proszę rzeczowo.
Walczę z zapytaniami XPathowymi w Delphi 7.
Używam standardowych komponentów dostępnych w Delphi + MSXML2_TLB.
Kiedy za pomocą metody selectNodes próbuję poszukać elementu następującego w drzewie po elemencie spełniającym warunek za pomocą following-sibling:: wywala mi błędy, że w okolicy ":" oczekiwano tokenu eof (sic!)
Żeby było bardziej obrazowo. Pobieram sobie kod HTML (za pomocą TWebBrowser) np. z tej strony:
https://prog.nfz.gov.pl/APP-JGP/GrupaSzczegoly.aspx?id=39SOMy4gZizarMBqZxjD6Ji38X0a74Fc
przerabiam go tak, żeby zaakceptował go IXMLDomDocument2 (tak na prawdę to dodaję znaki -> " <- w niektórych miejscach przy atrybutach i domykam niektóre znaczniki znakiem -> / <- - np. BR).
Zapytania XPath, nawet te dosć skomplikowane działają, ale kiedy np. chcę wykonać:
//DIV[@class="form" and DIV[@class="linia"]/DIV[text()="02 - KUJAWSKO-POMORSKI"]]/following-sibling::DIV[1]/TABLE/TBODY/TR/TD[@class="prawa"]/SPAN/text()
Dostaję błąd, że "oczekiwano tokenu 'eof' a znaleziono ':'"
To samo zapytanie odpalone np. w XMLSpy robi robotę i znajduje to czego oczekuję.
Podobna sytuacja jest z niektórymi metodami - np. position()
OmniXML w ogóle nie łyka tak spreparowanej strony HTML. Wdaje mi się, że interface IXMLDomDocument2 nie kuma niektórych operatorów, które widać pojawiły się później.
W dokumentacji Microsoftu:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms760218(v=vs.85).aspx
opisany jest IXMLDomDocument3, którego nie mogę wykorzystać w D7 (zresztą z tego co rozumiem niewiele wnosi do sprawy).
Ma ktoś pomysł jak rozwiązać ten problem ?