Я не так хорошо знаком с .NET API, но вы можете отправить более общий XPATH, который игнорирует пространства имен, сопоставляя его с любым элементом (например, *
) и используя local-name
в предикате. фильтры.
например. используя /*[local-name()='foo']/*[local-name()='bar']/*[local-name()='baz']
найти ns:foo/ns:bar/ns:baz
без объявления пространства имен ns .
Таким образом, вам не нужно привязываться к определенному пространству имен во время компиляции, и вы можете передавать произвольные операторы XPATH.
Очевидно, что с помощью операторов XPATH, не поддерживающих пространство имен, вы можете получить непредвиденные результаты (если имеется смешанное содержимое пространства имен с элементами с одинаковыми именами), а XPATH действительно многословен.
В XPATH 2.0 вы можете использовать подстановочные знаки для пространств имен: /*:foo/*:bar/*:baz
, но вам придется использовать Saxon , чтобы получить поддержку XSLT / XPATH 2.0 в .NET.