XPath _ PHP - Разбор XHTML - Проблема? - PullRequest
0 голосов
/ 15 марта 2011

За последние часы я добился значительного прогресса и, наконец, врезался в стену.

Вот мой код:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$info = curl_exec($ch);

$html = new DOMDocument();
$html->loadHTML($info);


$xpath = new DOMXPath($html);
$texts = $xpath->query("//div[@class='summary-gems']/ul/li");
$imgs = $xpath->query("//div[@class='summary-gems']/ul/li");

for ($i = 0; $i < $texts->length; $i++) {
$gems[$i]['text'] = $texts->item($i)->nodeValue;
$gems[$i]['img'] = $imgs->getAttribute('href');

echo $gems[$i]['img'];
die;
}

Вот как выглядит XHTML на данный момент:

<div class="summary-gems">
    <ul>
        <li>
            <span class="value">5</span>
            <span class="times">x</span>
            <span class="icon">
                <span class="icon-socket socket-2">
                    <a href="/wow/en/item/52207" class="gem">
                        <img src="http://us.battle.net/wow-assets/static/images/icons/18/inv_misc_cutgemsuperior6.jpg" alt="" />
                        <span class="frame"></span>
                    </a></span></span>
            <a href="/wow/en/item/52207" class="name color-q3">Brilliant Inferno Ruby</a>
            <span class="clear">
                <!-- -->
            </span>
        </li>
        <li>
            <span class="value">3</span>
            <span class="times">x</span>
            <span class="icon">
                <span class="icon-socket socket-10">
                    <a href="/wow/en/item/52236" class="gem">
                        <img src="http://us.battle.net/wow-assets/static/images/icons/18/inv_misc_cutgemsuperior3.jpg" alt="" />
                        <span class="frame"></span>
                    </a></span></span>
            <a href="/wow/en/item/52236" class="name color-q3">Purified Demonseye</a>
            <span class="clear">
                <!-- -->
            </span>
        </li>
        <li>
            <span class="value">3</span>
            <span class="times">x</span>
            <span class="icon">
                <span class="icon-socket socket-6">
                    <a href="/wow/en/item/68356" class="gem">
                        <img src="http://us.battle.net/wow-assets/static/images/icons/18/inv_misc_cutgemsuperior4.jpg" alt="" />
                        <span class="frame"></span>
                    </a></span></span>
            <a href="/wow/en/item/68356" class="name color-q3">Willful Ember Topaz</a>
            <span class="clear">
                <!-- -->
            </span>
        </li>
        <li>
            <span class="value">1</span>
            <span class="times">x</span>
            <span class="icon">
                <span class="icon-socket socket-1">
                    <a href="/wow/en/item/52298" class="gem">
                        <img src="http://us.battle.net/wow-assets/static/images/icons/18/inv_misc_metagem_b.jpg" alt="" />
                        <span class="frame"></span>
                    </a></span></span>
            <a href="/wow/en/item/52298" class="name color-q3">Destructive Shadowspirit Diamond</a>
            <span class="clear">
                <!-- -->
            </span>
        </li>
    </ul>
</div>

Когда я получаю текстовую часть, я получаю простой текст в этом конкретном узле (4 из них в этом событии). То, что я хочу, это ВСЕ XHTML, который находится там, если это возможно. Если нет, то я хочу получить «источник изображения» и «класс гиперссылки 'gem'" для каждого узла. Я немного озадачен тем, как получить что-либо, кроме простого текста узла в этом событии.

Любая помощь будет оценена! Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.

1 Ответ

0 голосов
/ 15 марта 2011

XPath для ссылки

//div[@class='summary-gems']/ul//a[@class='gem']

и вы можете получить доступ к атрибуту с помощью

(string)$simplexmlelement['href']

Сделайте то же самое с <img src="..">.

Чтобы получить полный XML-код элемента, используйте $simplexmlelement->asXML().

...