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')]
Share:
47,444

Related videos on Youtube

user2082317
Author by

user2082317

Updated on July 12, 2022

Comments

  • user2082317
    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
    user2082317 about 11 years
    After 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
    Jens Erat about 11 years
    You 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
    mm759 over 7 years
    Close to the solution.