<div> foo <br /> bar <br /> baz </div>
Первый вопрос:
bar и baz - это текстовые узлы элемента div.
Второй вопрос:
Следующее выражение XPath.
/div/text()[not(contains(., "foo"))]
Это сработало бы и исключило бы foo из полученных данных.
bar
baz
<div>
2 уже правильно ответили.
Используйте тест узла text() для выбора текстовых узлов.
text()
/div/text()
Выбирает «foo», «bar» и «baz» (и пробельные символы) дочерних узлов текстового узла <div>.