Ostatnio przy tworzeniu transformaty XSLT natknąłem się na taki malutki problem.
Miałem mniej więcej taką strukturę XML:
xml version=“1.0“ encoding=“utf-8“?>
<body>
<div>
<div>
<h3>h3>
<ul>
<li>li>
<li>li>
<li>li>
ul>
<h3>h3>
<ul>
<li>li>
<li>li>
ul>
div>
<div>
<h3>h3>
<ul>
<li>li>
<li>li>
<li>li>
ul>
div>
div>
body>
Zależało mi na wszystkich elementach
i
(uzyskanych za pomocą wyrażenia “div/*”) i z napisaniem odpowiedniego zapytania XPath nie było problemu. Problem miałem, gdy próbowałem będąc na konkretnym elemencie
, pobrać wszystkie elementy
- z sąsiadującego elementu
.
Gdy mając kolekcję wszystkich elementów
oraz
próbowałem dostać się do następnego elementu przy użyciu operatora nawiasów kwadratowych i indeksu [] dostawałem dziwny rezultat.
Dla zapytania “../../div/*[2]” zwracana była kolekcja dwóch elementów
, z obu elementów
(elementy zaznaczone pogrubioną czcionką w powyższym kodzie), a więc próbując dostać się do elementów
- za pomocą “../../div/*[2]/li” otrzymywałem zbyt dużo elementów.
Rozwiązanie okazało się banalne. Wystarczyło dodać parę nawiasów grupujących działania. Poprawny XPath to: “(../../div/*)[2]/li”. Gdy jesteśmy na elemencie
wybierze on wszystkie elementy
- z przyległego elementu
i tylko z niego :-).
Oczywiście rozwiązanie podsuną MSDN.
Founder of Octal Solutions a .NET software house.
Passionate dev, blogger, occasionally speaker, one of the leaders of Wroc.NET user group. Microsoft MVP. Podcaster – Ostrapila.pl
, pobrać wszystkie elementy
- .
- za pomocą “../../div/*[2]/li” otrzymywałem zbyt dużo elementów.
Rozwiązanie okazało się banalne. Wystarczyło dodać parę nawiasów grupujących działania. Poprawny XPath to: “(../../div/*)[2]/li”. Gdy jesteśmy na elemencie
wybierze on wszystkie elementy
- z przyległego elementu
- i tylko z niego :-).
Oczywiście rozwiązanie podsuną MSDN.
Founder of Octal Solutions a .NET software house.
Passionate dev, blogger, occasionally speaker, one of the leaders of Wroc.NET user group. Microsoft MVP. Podcaster – Ostrapila.pl
Gdy mając kolekcję wszystkich elementów
oraz
próbowałem dostać się do następnego elementu przy użyciu operatora nawiasów kwadratowych i indeksu [] dostawałem dziwny rezultat.
Dla zapytania “../../div/*[2]” zwracana była kolekcja dwóch elementów
, z obu elementów
(elementy zaznaczone pogrubioną czcionką w powyższym kodzie), a więc próbując dostać się do elementów
Dla zapytania “../../div/*[2]” zwracana była kolekcja dwóch elementów
- , z obu elementów