Метод DomCrawler count () возвращает 13, но html () возвращает пустую строку - PullRequest
0 голосов
/ 08 июня 2019

Я удаляю строку XML со следующей структурой:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Body>
        <GetListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
            <GetListItemsResult>
                <listitems xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:z="#RowsetSchema">
                    <rs:data ItemCount="13">
                        <z:row ows_ContentTypeId="0x0100FAE5914930320F40A297829F2BA48F13" ows_Title="one record" ows_LinkTitleNoMenu="qqq" ows_LinkTitle="qqq2" />
                        <z:row ows_ContentTypeId="0x0100FAE5914930320F40A297829F2BA48F13" ows_Title="two record" ows_LinkTitleNoMenu="www" ows_LinkTitle="www2" />
                        <z:row ows_ContentTypeId="0x0100FAE5914930320F40A297829F2BA48F13" ows_Title="other record" ows_LinkTitleNoMenu="ddd" ows_LinkTitle="ddd3"  />
                    </rs:data>
                </listitems>
            </GetListItemsResult>
        </GetListItemsResponse>
    </soap:Body>
</soap:Envelope>

Этот XML является результатом вызова cURL.

Итак, мой PHP-код:


$crawler = new Crawler( $xml_response ); 
$first  = $crawler->filterXPath('//soap:Envelope/soap:Body');

$cr2 = new Crawler( $first->html() );
$second = $cr2->filter('GetListItemsResponse > GetListItemsResult > listitems');

$cr3 = new Crawler( $second->html() );
$third = $cr3->filter('data');

$cr4 = new Crawler( $third->html() );
$fourth = $cr4->filter('row');

Затем для отладки я делаю:

echo 'Items :: ' . $fourth->count(); // "Items :: 13"

Теперь я повторяю $ четвертый var, потому что содержит 13 элементов

$fourth->each(function(Crawler $row, $i)
{
    echo $i . PHP_EOL; // 0
    echo strlen($row->html()) // 0

    die; // die for debug

});

В $ row-> html () я ожидаю эту строку XML вместо пустой строки:

<row ows_ContentTypeId="0x0100FAE5914930320F40A297829F2BA48F13" ows_Title="one record" ows_LinkTitleNoMenu="qqq" ows_LinkTitle="qqq2"/></row>
...