Выражение XPath для поиска элементов, имя тега которых содержит "Имя",

Я новичок в XPath.

Я ищу способ получить все элементы, чье имя тега содержит определенную строку.

Например, если у меня есть XML, как показано ниже, я хочу получить все элементы, имя тега которых содержит слово "Имя". то есть я хочу получить следующие элементы: <SquareName>, <RectangleName> и <ParallelogramName>.

Я попробовал несколько комбинаций name(), contains() и т.д., но это не сработало. Пожалуйста, предложите.

<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>

Ответы

Ответ 1

Для решения XPath:

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

Ответ 2

Поскольку префикс пространства имен не существует, вы также можете использовать

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