Про суть сказать сложно... Сам дошёл до этого методом тыка))
По всей видимости xpath читает эту часть ("........./ns2:item/guid/text()") как:
Выбрать текст из тега с namespace равняющемуся ПУСТОЙСТРОКЕ и именем guid, который вложен в тег с namespace равняющемуся ns2 и именем item ... и тд
Но у guid есть немспейс (определённый по умолчанию):
Получается, что в xml у тега namespace указан, а в xpath нет. Вот и не выбирается нужный тег.
Способа указать в xpath дефолтный namespace я не находил.
Поэтому мы просто выбираем любой элемент, где имя соответствует строке 'guid' вне зависимости от неймспейса.
Если используете xslt, то ещё можно "подделать" его:
Xml