xpath soap名称空间抓取项目

时间:2011-05-27 12:22:39

标签: soap xpath

我觉得我做的事情真的不对。 在做肥皂时,他们给我带了一个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] - &GT; exceptie-&G​​T;属性() - &GT;错误代码

例如......

1 个答案:

答案 0 :(得分:0)

...不知道这对每个人来说是否是“更好的方法”,但这里有一个直接的XPath表达式来选择错误代码。通过删除步骤并使用//(在开头或中间),可以缩短效率并降低效率。如果您更喜欢较长的语法,则使用@(或使用attribute::轴选择属性。如果attribute(或exceptie元素)不存在,则不返回任何内容。

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

请记住注册您在XPath表达式中使用的所有名称空间前缀。