Не удалось обработать запрос xpath с использованием libxml2 - PullRequest
0 голосов
/ 12 мая 2018

У меня ниже упомянутый XML-запрос запроса

// Пространство имен char * pszNs_Soap_prefix = "s";char * pszNs_Soap_URL = "http://schemas.xmlsoap.org/soap/envelope/";

char * pszNs_SamlP_Prefix =" sp "; char * pszNS_SamlP_URL =" урна: оазис: имена: tc: SAML: 1.0: протокол ";

charpszNS_Saml_Prefix = "sl"; char * pszNS_Saml_URL = "urn: oasis: names: tc: SAML: 1.0: утверждение";

char* pszXPathQuery3 = "/s:Envelope/s:Body/sp:Response/sl:Assertion/sl:AttributeStatement/s1:Attribute[@AttributeName='role']/sl:AttributeValue";

, но получая NULL из функции библиотеки xmlXPathEvalExpression, выше - мой xpзапрос, не знаю, где я иду не так.

m_pXmlXPathObject = xmlXPathEvalExpression ((xmlChar *) pszXPathQuery, m_pXmlXPathContext);

XML string

                                <saml:Assertion MajorVersion="1"
                                                        MinorVersion="1"
                                                        AssertionID="_a75adf55-01d7-40cc-929f-dbd8372ebdfc"
                                                        Issuer="SAML_AUTH_URI"
                                                        IssueInstant="2005-06-08T12:00:01.100Z">
                                        <saml:AuthenticationStatement
                                                        AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password"
                                                        AuthenticationInstant="2005-06-08T11:59:59.000Z">
                                                <saml:Subject>
                                                        <saml:NameIdentifier>jre</saml:NameIdentifier>
                                                </saml:Subject>
                                        </saml:AuthenticationStatement>
                                        <saml:AttributeStatement>
                                                <saml:Attribute
                                                                AttributeName="role"
                                                                AttributeNamespace="oasis:names:tc:xacml:2.0:subject">
                                                        <saml:AttributeValue>weboamadmin</saml:AttributeValue>
                                                </saml:Attribute>
                                        </saml:AttributeStatement>
                                </saml:Assertion>

                        </samlp:Response>
                </SOAP-ENV:Body>

        </SOAP-ENV:Envelope>

1 Ответ

0 голосов
/ 01 ноября 2018

Проблема заключается в том, что вам нужно зарегистрировать свои пространства имен ДО того, как вы выполните запрос xpath. Веб-сайт xmlsoft.org дает хороший пример того, как это сделать!

http://xmlsoft.org/examples/xpath1.c

...