Mam zmienną zewnętrzną wchodzącą jako ciąg i chciałbym zrobić przełącznik/case na nim. Jak to zrobić w Xquery?Jak włączyć ciąg znaków w XQuery?
Odpowiedz
Począwszy XQuery 1.1 za pomocą przełącznika:
http://www.w3.org/TR/xquery-11/#id-switch
switch ($animal)
case "Cow" return "Moo"
case "Cat" return "Meow"
case "Duck" return "Quack"
default return "What's that odd noise?"
XQuery nie ma funkcji do włączania elementów innych niż elementy.
Pierwszą rzeczą, którą robisz, jest zamiana łańcucha na element.
let $str := "kitchen"
let $room := element {$str} {}
Następnie wystarczy użyć typeswitch zrobić normalny przełącznik:
return typeswitch($room)
case element(bathroom) return "loo"
case element(kitchen) return "scullery"
default return "just a room"
Należy pamiętać, że może to być tylko MarkLogic rozwiązanie.
Wystarczy użyć serię jeśli wyrażenia:
if ($room eq "bathroom") then "loo"
else if ($room eq "kitchen") then "scullery"
else "just a room"
Korzystanie z typeswitch ukrywa to, co naprawdę robi.
Która z tych metod jest najbardziej wydajna, zależy od procesora XQuery, z którego korzystasz. W idealnym świecie powinno to być tylko kwestią gustu, ponieważ optymalizator powinien wybrać odpowiednią metodę, ale jeśli wydajność jest ważna, warto przetestować obie wersje. Byłbym bardzo zaskoczony, gdyby procesor zoptymalizował budowę węzła z twojego przykładu i nie zoptymalizował mojego przykładu do wyspecjalizowanego przełącznika.
Czasami jest miło i elegancko ukryć to, co naprawdę robisz, jeśli nie zapominasz, że robisz to ... – Ar3s
Głosowałem za tym, ponieważ pytanie próbuje znaleźć składnię przełącznika/case nie, jeśli/else. – Sixty4Bit
@ Sixty4Bit - Kiedy odpowiadałem na pytanie, zachowanie przełącznika nie zostało sfinalizowane, dlatego w lutym opublikowałem drugą odpowiedź! –
Dla Saxon, można użyć coś takiego:
declare function a:fn($i) {
typeswitch ($i)
case element(a:elemen1, xs:untyped) return 'a'
case element(a:elemen2, xs:untyped) return 'b'
default return "error;"
};
Pozdrowienia,
http://rrusin.blogspot.com/2010/01/embedding-xquery-in-java.html
Jeśli procesor obsługuje XQuery 1.1, to możesz po prostu zrobić:
switch ($room)
case "bathroom" return "loo"
case "kitchen" return "scullery"
default return "just a room"
- 1. Jak włączyć ciąg znaków identycznych dla repozytoriów Git?
- 2. Jak rozszyfrować kod XML z XQuery?
- 3. Jak zmienić makro w ciąg znaków przy użyciu cpp?
- 4. Jak rozwinąć ciąg znaków w ciągu znaków w pythonie?
- 5. Aktualizacja licznika w XQuery
- 6. Jak sortować alfabetycznie ciąg znaków?
- 7. hex ciąg znaków w Pythonie
- 8. Jak zadeklarować długi ciąg znaków w Pythonie?
- 9. Jak podzielić ciąg znaków w Pythonie?
- 10. Jak zmienić ciąg znaków w obiekt lokalizacji?
- 11. Jak analizować ciąg znaków w JavaScript?
- 12. Jak sformatować ciąg znaków LaTeX w python?
- 13. Jak wydrukować ciąg znaków dosłownie w Pythonie
- 14. Jak zadeklarować ciąg znaków w Objective-C?
- 15. Jak usunąć chińskich znaków w ciąg
- 16. Jak opublikować ciąg znaków w Rust FFI?
- 17. Jak przekształcić ciąg znaków w dyktę
- 18. Jak uzyskać sformatowany ciąg znaków w OCaml?
- 19. Jak przeanalizować złożony ciąg znaków w C++?
- 20. ciąg znaków do listy znaków
- 21. Jak przekonwertować ArrayList na ciąg znaków (ciąg []) w C#
- 22. Jak przekonwertować ciąg znaków szesnastkowy na ciąg bajtów w Perlu?
- 23. Zamień ciąg znaków w pliku
- 24. jak używać, jeśli jeszcze w przydziału xquery
- 25. Jak wybrać wartość atrybutu węzła w XQuery?
- 26. XQuery: Jak prawidłowo dodać, w pętli for
- 27. Ruby taśmy ciąg znaków
- 28. Utwórz ciąg znaków N
- 29. R, podzielony ciąg znaków na pary znaków
- 30. Konwertowanie znaków Unicode na ciąg znaków
Roztwór ten (o) działają w każdym procesorze xquery, ale nie jest tak wyraźny jak proste zagnieżdżone jeśli roztwór. –
Po prostu nienawidzę zagnieżdżonych, jeśli jest. Podoba mi się przykład XQuery 1.1, więc oznaczyłem go jako odpowiedź. – Sixty4Bit