【问题标题】:XPath _ PHP -- Parsing XHTML -- Trouble?XPath _ PHP -- 解析 XHTML -- 麻烦?
【发布时间】:2011-03-15 06:43:29
【问题描述】:

在过去的几个小时里,我取得了重大进展,终于碰壁了。

这是我的代码:

$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'”。我对如何在此事件中获取除节点的纯文本之外的任何内容感到有些困惑。

任何帮助将不胜感激!如果您有任何问题,请告诉我。

【问题讨论】:

  • @user554095:您写了 “我想要的是所有的 XHTML”。然后,您要求使用正确的 DOM 方法来序列化内部内容。重新标记。

标签: php dom innerhtml


【解决方案1】:

链接的 XPath 是

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

您可以使用

访问该属性
(string)$simplexmlelement['href']

&lt;img src=".."&gt; 执行相同操作。

要获取元素的完整 XML,请使用 $simplexmlelement-&gt;asXML()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2011-03-11
    相关资源
    最近更新 更多