Это часто задаваемые вопросы о том, как создать выражение XPath для документа с пространством имен по умолчанию . В SO много ответов.
Причина этой проблемы в том, что
<query xmlns='jabber:iq:rpc'>
содержит пространство имен по умолчанию , и все его дочерние элементы находятся в этом пространстве имен.
Решение - , либо использовать шаги местоположения типа:
*[name()='xxx']
Затем выражение XPath вида:
*[name()='iq']/*[name()='query']/*[name()='methodCall']/*[name()='methodName']
выбирает нужные узлы.
В еще более сложных случаях, когда существует несколько (вложенных) пространств имен по умолчанию, может потребоваться использование шагов размещения вида:
*[name()='xxx' and namespace-uri()='theCorrectNamespace']
Или (рекомендуется) на языке хостинга (обычно это возможно), чтобы зарегистрировать пространство имен 'jabber:iq:rpc'
и связать с ним префикс, скажем "x:"
.
Тогда выражение XPath, выбирающее нужные узлы, будет выглядеть так:
iq/x:query/x:methodCall/x:methodName
, где префикс "x:"
связан с зарегистрированным пространством имен 'jabber:iq:rpc'
.