XPath expression to find elements whose tag name contains 'Name'
47,444
Solution 1
For an XPath solution:
//*[contains(local-name(), 'Name')]
Solution 2
Since there is no Namespace prefix, you can also use
//*[contains(name(), 'Name')]
Related videos on Youtube
Author by
user2082317
Updated on July 12, 2022Comments
-
user2082317 almost 2 years
I am a newcomer to XPath.
I am looking for a way to get all elements whose tag name contains a particular string.
For example, if I have XML like below, I want to get all the elements whose tag name contains the word 'Name'. i.e., I want to fetch the following elements:
<SquareName>
,<RectangleName>
, and<ParallelogramName>
.I tried some combinations of
name()
,contains()
etc., but it did not work. Please suggest.<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>
-
user2082317 about 11 yearsAfter looking at the result, I find that among the Elements that is returns, I need to avoid one element with tag name as 'PeriodName'. I can programatically do that but was wondering if XPath has a solution for that also ?
-
Jens Erat about 11 yearsYou could either use regular expressions or if it's only for this one, another predicate (or combine them using
or
)://*[contains(local-name(), 'Name')][local-name() != 'PeriodName']
-
mm759 over 7 yearsClose to the solution.