Почему этот вызов метода может возвращать префиксный элемент SAML2, даже если селектор XPATH является префиксом saml / samlp?
Вы добавили эти префиксы пространства имен в диспетчер пространства имен, используя то же самое фактическое пространство именобъявление, используемое в самом XML для префиксов saml2p
и saml2
. Т.е. вы сказали менеджеру пространства имен, что префикс samlp
должен соответствовать пространству имен XML "urn:oasis:names:tc:SAML:2.0:protocol"
, которое является тем же пространством имен, которому соответствует префикс saml2p
.
Селектор XPATH, использующий ваш samlp
префикс будет совпадать с любым префиксом пространства имен, который объявлен соответствующим, идет в пространство имен "urn:oasis:names:tc:SAML:2.0:protocol"
. Поскольку префикс saml2p
делает, он будет сопоставлять узел с этим префиксом.
Аналогично для saml2
и saml
.
Очень важно убедиться, что вы не путаетепрефикс пространства имен XML с самим пространством имен XML. Пространства имен в вашем XML - это строки "urn:oasis:names:tc:SAML:2.0:protocol"
и "urn:oasis:names:tc:SAML:2.0:assertion"
. Префиксами являются идентификаторы saml2p
, saml2
, samlp
и saml
(и ds
, в этом отношении). Префиксы - это просто способы обращения к фактическим пространствам имен.
Таким образом, одинаковым образом две разные переменные могут быть назначены одному и тому же строковому значению, и, таким образом, эти два разных имени переменной могут «означать» одно и то жестроковое значение в коде, поэтому два префикса пространства имен XML saml2p
и samlp
означают одно и то же, как и saml2
и saml
.
Таким образом, для именования узлов XMLбудь то через XPATH или любой другой механизм поиска в API, важно только само пространство имен 1039 *, а не префикс, который использовался для указания пространства имен.
Таким образом, ваше выражение XPATH "/samlp:Response/saml:Assertion"
может найти элемент Assertion
в вашем XML, даже если это выражение использует префиксы, отличные от тех, которые используются в самом документе XML. Ссылки на узлы в XPATH по-прежнему находятся в том же пространстве имен, что и в самом XML.