Выражение XPath //div[@class="content"]
выбирает элемент div
- не больше и не меньше - и применение функции string()
дает вам строковое значение элемента, которое является объединением всех его дочерних текстовых узлов.
Получение всего текста за исключением того, что содержится в одном конкретном дочернем элементе, вероятно, невозможно в XPath 1.0. С XPath 2.0 это можно сделать как
string-join(//div[@class="content"]/(node() except table)//text(), '')
Но для такого рода манипуляций вы действительно находитесь в области трансформации, а не чистого выбора, поэтому вы расширяете пределы того, что разработано для XPath. для.