Jeśli chcesz wybrać wszystkie h5
które są dokładnie 4 poziomy poniżej ich przodka h1, użyj:
//h5[ancestor::*[4][self::h1]]
XSLT - na podstawie weryfikacji:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:copy-of select="//h5[ancestor::*[4][self::h1]]"/>
</xsl:template>
</xsl:stylesheet>
Kiedy transformacja ta jest stosowana na poniższym dokumencie XML:
<t>
<head/>
<body>
<h1>First Main title
<a>
<b>
<c>
<h5 id="id1"/>
<d>
<h5 id="id2"/>
</d>
</c>
</b>
</a>
</h1>
</body>
</t>
wyrażenie XPath jest oceniane i wyniku oceny (wybrane elementy h1
(w tym przypadku tylko jeden)) są kopiowane na wyjście:
<h5 id="id1"/>
Jeśli nie chcesz, aby policzyć liczbę poziomów pośrednich, Butare pewność, że nie przekraczają one pewną liczbę (powiedzmy 7), można napisać:
//h1[descendent::*[not(position() > 7)][self::h1]]
To wybiera dowolnego potomka h5
dowolnego z h1
, gdzie "odległość" w poziomach pomiędzy h1
i potomkiem h5
nie przekracza 7.
Należy pamiętać:
Wyrażenie jak poniżej - jak zasugerowano w innych odpowiedzi:
//h1//h5
nieprawidłowo wybiera dla powyższego dokumentu:
<h5 id="id1"/>
<h5 id="id2"/>
Drugi z dwóch wybranych elementów znajduje się w większej odległości od żądanego elementu od swojego przodka.
Czy potrzebujesz wszystkich/wszystkich znaczników 'h5' lub potrzebujesz konkretnego w HTML? Jeśli potrzebujesz konkretnego, czy posiadasz ID lub CLASS dla 'h5', które pomogłyby ci przejść do niego, lub coś konkretnego na temat konkretnego, który może być użyty jako punkt orientacyjny? –
Podczas gdy odpowiedź pguardiario jest poprawna, biorąc pod uwagę sposób, w jaki sformułowałeś swoje pytanie, jak sugeruje Tin Man, najprawdopodobniej jest lepszy sposób na celowanie w konkretny element, którego szukasz. –
@tinMan Mark Thomas - zapomniałem o tym pytaniu - przepraszam za to. Problem polegał na tym, że mam jedno h5, jak pokazano, i kolejne h5 w innej heirarchii. Na razie odpowiedź pguardiario jest dla mnie bardzo dobra. Zaktualizuję później. Dzięki za pomoc – nilanjan