xpath мыло захватывает пространство имен - PullRequest
0 голосов
/ 27 мая 2011

Я чувствую, что делаю что-то действительно не правильное.Делая мыло, они возвращают мне xml, который может содержать или не содержать ошибку.Я хотел бы проверить, если ошибка существует, если не читать значения.почему-то я не могу получить его напрямую: (

Ниже приведен пример возврата чего-либо с результатами и сообщения, которое выдает ошибку (имя не найдено)

<?xml version="1.0" encoding="utf-8"?>
<soapEnvelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <envHeader xmlns:env="http://www.w3.org/2003/05/soap-envelope">
        <wsaAction>http://www.rechtspraak.nl/namespaces/ccr01/searchPersonResponse</wsaAction>
        <wsaMessageID>urn:uuid:b75d2932-5687-4871-9d07-3b74b084978a</wsaMessageID>
        <wsaRelatesTo>urn:uuid:9112d870-248d-4d07-acd0-d88e4a48d547</wsaRelatesTo>
        <wsaTo>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsaTo>
        <wsseSecurity>
        <wsuTimestamp wsu:Id="Timestamp-061df7b5-32a2-4021-852d-2df98953e076">
            <wsuCreated>2011-05-27T12:11:45Z</wsuCreated>
            <wsuExpires>2011-05-27T12:16:45Z</wsuExpires>
        </wsuTimestamp>
    </envHeader>
    <soapBody>
        <searchPersonResponse xmlns="http://www.rechtspraak.nl/namespaces/ccr01">
            <searchPersonResult>
                <CCR_WS xmlns="http://www.rechtspraak.nl/namespaces/ccr">
                    <curandus>
                        <ccn>1</ccn>
                        <cur_voornamen>Jan</cur_voornamen>
                        <cur_voorvoegsels>van</cur_voorvoegsels>
                        <cur_achternaam>Beek</cur_achternaam>
                        <geboorte_datum>1980-01-02</geboorte_datum>
                        <geboorte_plaats>Werkendam</geboorte_plaats>
                    </curandus>
                </CCR_WS>
            </searchPersonResult>
        </searchPersonResponse>
    </soapBody>
</soapEnvelope>

и сообщение безрезультаты

<?xml version="1.0" encoding="utf-8"?>
<soapEnvelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <envHeader xmlns:env="http://www.w3.org/2003/05/soap-envelope">
        <wsaAction>http://www.rechtspraak.nl/namespaces/ccr01/searchPersonResponse</wsaAction>
        <wsaMessageID>urn:uuid:b75d2932-5687-4871-9d07-3b74b084978a</wsaMessageID>
        <wsaRelatesTo>urn:uuid:9112d870-248d-4d07-acd0-d88e4a48d547</wsaRelatesTo>
        <wsaTo>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsaTo>
        <wsseSecurity>
        <wsuTimestamp wsu:Id="Timestamp-061df7b5-32a2-4021-852d-2df98953e076">
            <wsuCreated>2011-05-27T12:11:45Z</wsuCreated>
            <wsuExpires>2011-05-27T12:16:45Z</wsuExpires>
        </wsuTimestamp>
    </envHeader>
    <soapBody>
        <searchPersonResponse xmlns="http://www.rechtspraak.nl/namespaces/ccr01">
            <searchPersonResult>
                <CCR_WS xmlns="http://www.rechtspraak.nl/namespaces/ccr">
                    <exceptie errorcode="1">No Results found.</exceptie>
                </CCR_WS>
            </searchPersonResult>
        </searchPersonResponse>
    </soapBody>
</soapEnvelope>

Вот мой код для выбора пространства имен, затем проверьте

$results = simplexml_load_string($response);
$results->registerXPathNamespace('ccr','http://www.rechtspraak.nl/namespaces/ccr');

$lijst = $results->xpath('//ccr:CCR_WS');
$errorcode  = $lijst[0]->exceptie->attributes()->errorcode;
$error      = $lijst[0]->exceptie;
if (isset($errorcode) AND $errorcode != "") {
    // do things with the error code
} else {
    $lijst = $results->xpath('//ccr01:searchPersonResult'); 
    $cur = $lijst[0]->CCR_WS->curandus;
    echo $cur->ccn."<BR>";
    echo $cur->cur_voornamen."<BR>";
    echo $cur->cur_voorvoegsels."<BR>";
    echo $cur->cur_achternaam."<BR>";
    echo $cur->geboorte_datum."<BR>";
    echo $cur->geboorte_plaats."<BR>";
}

, несомненно, есть лучший способ получения $ lijst [0] -> exceptie-> атрибутов) -> код ошибки

например ...

1 Ответ

0 голосов
/ 28 мая 2011

... Не знаю, является ли это «лучшим способом» для всех, но вот прямое выражение XPath для выбора кода ошибки.Вы можете сделать его короче и менее эффективным, отбрасывая шаги и используя // (в начале или в середине).Атрибуты выбираются с @ (или с осью attribute::, если вы предпочитаете более длинный синтаксис).Если атрибут (или элемент exceptie) не существует, ничего не возвращается.

/*/*/ccr01:searchPersonResponse/ccr01:searchPersonResult/ccr:CCR_WS/ccr:exceptie/@errorcode

Не забудьте зарегистрировать все префиксы пространства имен, которые вы используете в выражении XPath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...