"|" w rzeczywistości nie jest operatorem „OR” w XPath. Pozwala on na zbudowanie zestawu węzłów złożonego z podrzędnych drzew całego drzewa XML. „// książka | // cd” oznacza, że wśród wszystkich węzłów potomnych i potomków węzła głównego znajdź wszystkie o nazwie „książka”, a następnie znajdź również wszystkie o nazwie „cd”. Jeśli w zstępstwie węzła głównego znajdują się tylko węzły książek, zestaw węzłów będzie zawierał tylko węzły książek. Jeśli w podrzędności węzła głównego są tylko węzły cd, twój zestaw węzłów będzie zawierał tylko węzły cd. Jeśli w zstępstwie węzła głównego znajdują się zarówno węzły book, jak i cd, twój zestaw węzłów będzie zawierał zarówno węzły book, jak i cd.
Stephan
1
Tak, zrozumiałem, co "|" operator jest. Moje pierwsze pytanie dotyczy operatora OR. Tak więc, jeśli są książki i płyty CD, znajdzie tylko książki, jeśli nie ma książek, ale tylko płyty CD, znajdzie płyty CD.
Więc nie ma odpowiedzi na moje pytanie / brak operatora OR w XPath dla węzłów?
user569008
3
Operatory logiczne (OR, XOR, AND) są takie same w każdym języku programowania, ale język naturalny interpretuje je nieco inaczej. Podczas omawiania kwestii z nimi związanych najlepiej jest usuwać niejasności. Ponadto z XPath to najlepiej nie myśleć o wyniku jako istota a lub b , ale raczej to, że może być umieszczony przez A lub B . Logiczne oroznacza, że można go zlokalizować a or b or both. Logiczne xor(eXclusive OR) oznacza, że może zostać zlokalizowany przez either a or b, but not both. Logiczne andoznacza, że można go zlokalizować both a and b.
neXus
52
Jeśli chcesz wybrać tylko jeden z dwóch węzłów z operatorem unii, możesz skorzystać z tego rozwiązania:
(//bookstore/book/title | //bookstore/city/zipcode/title)[1]
naprawdę (i )[1]oznacza wybranie tylko jednego z dwóch?!?!
oldboy
@Anthony Tak, wybierze jeden z dwóch, jeśli istnieją oba węzły, lub wybierze jedyny, który istnieje.
azurkin
okej, źle zinterpretowałem twoje stwierdzenie. działa jak każdy inny operator „lub”, więc jeśli pierwszy warunek zwróci prawdę, to drugi jest pomijany, tak?
oldboy,
@Anthony Nie. Tutaj nie ma żadnych warunków. Istnieją węzły. I „|” - jest operatorem sumy węzłów. Tworzy zestaw węzłów z określonych ścieżek i nie gwarantuje kolejności węzłów. Jeśli węzeł o określonej ścieżce nie istnieje, po prostu brakuje go w zestawie węzłów. Następnie konstrukcja „[1]” pobiera pierwszy węzeł z zestawu węzłów.
azurkin
Chodzi mi o to, że działa podobnie do operatora orlub w innych językach |, więc gdyby istniały oba węzły, zawsze zwracałby pierwszy węzeł?
oldboy,
3
Jeśli element ma dwie ścieżki xpath. Następnie możesz napisać dwie ścieżki x, jak poniżej:
Odpowiedzi:
Wszystkie
title
węzły zzipcode
lubbook
węzłem jako nadrzędnym:Wersja 1:
Wersja 2:
źródło
|
jest operatorem zbioru sum .or
oznacza, że można go zlokalizowaća or b or both
. Logicznexor
(eXclusive OR) oznacza, że może zostać zlokalizowany przezeither a or b, but not both
. Logiczneand
oznacza, że można go zlokalizowaćboth a and b
.Jeśli chcesz wybrać tylko jeden z dwóch węzłów z operatorem unii, możesz skorzystać z tego rozwiązania:
(//bookstore/book/title | //bookstore/city/zipcode/title)[1]
źródło
(
i)[1]
oznacza wybranie tylko jednego z dwóch?!?!or
lub w innych językach|
, więc gdyby istniały oba węzły, zawsze zwracałby pierwszy węzeł?Jeśli element ma dwie ścieżki xpath. Następnie możesz napisać dwie ścieżki x, jak poniżej:
xpath1
|xpath2
Na przykład:
źródło