2013-02-18 14 views
17

Jestem nowym użytkownikiem XPath.Wyrażenie XPath, aby znaleźć elementy, których nazwa tagu zawiera "Nazwa"

Szukam sposobu na uzyskanie wszystkich elementów, których nazwa tagu zawiera konkretny ciąg znaków.

Na przykład, jeśli mam XML jak poniżej, chcę uzyskać wszystkie elementy, których nazwa tagu zawiera słowo "Nazwa". tj. chcę pobrać następujące elementy: <SquareName>, <RectangleName> i <ParallelogramName>.

Próbowałem niektórych kombinacji name(), itp., Ale nie działało. Proszę sugerować.

<Objects> 
<Four-Sided> 
    <Square> 
     <SquareName>ABCD</SquareName> 
     <Length>4</Length> 
     <Height>4</Height> 
     <Colour>Blue</Colour> 
    </Square> 
    <Rectangle> 
     <RectangleName>EFGH</RectangleName> 
     <Length>10</Length> 
     <Height>6</Height> 
     <Colour>Brown</Colour> 
    </Rectangle> 
    <Parallelogram> 
     <ParallelogramName>WXYZ</ParallelogramName> 
     <Length>12</Length> 
     <Height>4</Height> 
     <Colour>Black</Colour> 
    </Parallelogram> 
</Four-Sided> 
</Objects> 

Odpowiedz

22

Do roztworu XPath:

//*[contains(local-name(), 'Name')] 
+0

Po patrząc na wynik, uważam, że wśród elementów, które jest zwraca, muszę unikać jednego elementu o nazwie znacznika jako "PeriodName". Mogę programowo to zrobić, ale zastanawiałem się, czy XPath ma również rozwiązanie? – user2082317

+1

Możesz użyć wyrażeń regularnych lub tylko dla tego, innego predykatu (lub połączyć je używając 'lub'): '// * [zawiera (local-name(), 'Name')] [local-name ()! = 'PeriodName'] ' –

0

Ponieważ nie ma nazw prefiks, można również wykorzystać

//*[contains(name(), 'Name')] 
+0

Blisko rozwiązania. – mm759

Powiązane problemy