В вашем примере отсутствует корневой элемент, поэтому я предполагаю что-то вроде этого:
<ROOT>
<A>
<B>1</B>
<B>2</B>
</A>
<C>
<D>3</D>
<D>4</D>
</C>
</ROOT>
При этом простой версией будет просто использовать соответствующее количество подстановочных знаков 'any element', чтобы получить ваш результат:
xpath = '/*/*/*'
(имеется в виду «выбрать любой дочерний элемент любого дочернего элемента любого корневого элемента»)
В качестве альтернативы, если вы хотите выразить уровень численно, вы можете использовать:
xpath = '//*[count(ancestor::*) = 2]'
(имеется в виду «выбрать любой элемент с 2 предками»)
Редактировать / Заметьте: Как правильно отметил Димитр Новатчев, важно различать узлов и элементов , и я исправил свой ответ соответственно.(Хотя сами элементы являются узлами, есть также шесть других типов узлов !)
Различие можно проиллюстрировать на данном примере, слегка изменив xpath на основе предка:
xpath = '//*[count(ancestor::node())=2]'
При этом будут выбраны A и B , поскольку корневой элемент будет считаться одним узлом-предком, а корневой узел '/' - другим!