Jest to ważny XPath w JavaScript:Przekształć JavaScript XPath w poprawnym zapytaniu PHP() XPath | normalizować JS XPath -> PHP
id("priceInfo")/div[@class="standardProdPricingGroup"]/span[1]
I okazało się ważnym PHP XPath do stosowania z DOMXPath-> zapytanie() jest
//*[@id="priceInfo"]//div[@class="standardProdPricingGroup"]//span[1]
- znasz jakieś biblioteki lub niestandardowe komponenty, które już wykonują tę transformację?
- Czy znasz dostępną dokumentację zawierającą dwie różnice w składni?
Moim głównym zmartwieniem jest to, że może istnieć wiele różnic, a ja staram się zidentyfikować te różnice i mam problemy z ich identyfikacją.
Pytanie może być również przedstawione w inny sposób: Ponieważ JavaScript może mieć różne prawidłowe formaty XPath, jak je normalizować, aby działały z PHP.
Jedna z aktualizacji wspomina również, że funkcja id() jest poprawna XPath, jeśli istnieje poprawny DTD, który zawiera tę definicję. Nie mam władzy nad DTD wejścia i jeśli istnieje sposób na znalezienie rozwiązania, które działa bez określonego DTD, byłoby super.
Aktualizacja:
Chcę przekształcić pierwszego formatu na drugi za pomocą algorytmu. Moje wejście jest pierwsze, a nie drugie. Nie można tego zmienić.
Jak zaznaczył @Nison Maël, drugi format jest prawidłowy Javascript XPath, jak przedstawiono tutaj: http://jsbin.com/elatum/2/edit to niestety tylko powiększa problem fragmentacji JavaScript XPath.
@sathe wskazał, że poprawna kwerenda JavaScript XPath działa dobrze w PHP, jeśli dane wejściowe udokumentowane mają poprawny DTD (@Dimitre Novatchev wspomniał o tym w komentarzu, ale przeoczył znaczenie). Niestety nie mam kontroli nad DTD wejścia, więc teraz muszę zbadać sposób na pokonanie tego, lub znaleźć rozwiązanie, które działa nawet bez ważnego DTD.
To jest świetne pytanie! Wygląda na to, że nie ma tam żadnej dokumentacji (przynajmniej nie przez pobieżne wyszukiwanie w Google). Jestem podekscytowany, widząc odpowiedź na tę. – Matt
Pierwsze wyrażenie jest prawnym wyrażeniem XPath. Jednakże, aby funkcja Xpath "id()' działała, XML musi mieć DTD, a definicje elementów w DTD muszą mieć atrybuty, które mają słowo kluczowe "ID". –
@DimitreNovatchev: A co z tłumaczeniem '//' na '/'? – choroba