Использование SelectionNamespaces
- правильный подход, вам просто не хватает пространства имен.
Обратите внимание, что ваш XML-документ явно устанавливает пространство имен по умолчанию следующим образом:
xmlns="http://purl.org/rss/1.0/"
Это означает, что любой элемент без префикса, например, элемент item
, фактически находится в пространстве имен по умолчанию. Поэтому, если вы хотите выбрать этот элемент с помощью выражения XPath, вы должны сначала установить соответствующее пространство имен выбора.
Для этого вы можете изменить свой звонок на setProperty
, например, так:
doc.setProperty('SelectionNamespaces', 'xmlns:rss="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cb="http://www.cbwiki.net/wiki/index.php/Specification_1.1"');
Здесь вы присвоили пространству имен по умолчанию из документа префикс rss:
в выражении XPath. После этого изменения следующее выражение XPath должно работать правильно:
nodes = doc.selectNodes('/rdf:RDF/rss:item/cb:statistics/cb:exchangeRate/cb:targetCurrency');
Это работает, потому что оно ссылается на элемент item
, используя правильное пространство имен. Тот факт, что префикс отличается между выражением XPath и исходным документом, не имеет значения. Это пространство имен, к которому привязан префикс, имеет значение.