php DomXPath - 如何从当前节点的父节点中选择子节点?

发布于 2024-11-29 14:40:04 字数 3974 浏览 2 评论 0原文

我有一个非常重要的问题,对我来说似乎很难.. 只是我需要从当前节点的父节点中选择子节点! 我知道我们使用 (..) 来选择父节点。 但就我而言还不够.. 这是我的 php 代码来获取所有颜色值

<?php
    /////////////////////////////////////////////////////////////////////
        $html='
            <table>
                <tr>
                    <td colspan="2">
                        <span>green</span>
                        <img src="green.gif" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <span>yellow</span>
                        <img src="yellow.gif" />
                    </td>
                    <td>
                        <span>red</span>
                        <img src="red.gif" />
                    </td>
                </tr>
            </table>
            <table>
                <tr>
                    <td>
                        <span>black</span>
                        <img src="black.gif" />
                    </td>
                </tr>
            </table>
        ';
    /////////////////////////////////////////////////////////////////////
        $dom = new DOMDocument();
        $dom->loadHTML($html);
        $xpath = new DomXPath($dom);
    /////////////////////////////////////////////////////////////////////
        $evaluate = $xpath->evaluate('.//table/tr/td/span');
        for($x=0,$results=''; $x<$evaluate->length; $x++)
        {
            $x1=$x+1;

            $query1 = $xpath->query('.//table/tr/td/span');
            $color = $query1->item($x)->nodeValue;
            $results .= "color $x1 is : $color<br/>";
        }
        echo $results;
    /////////////////////////////////////////////////////////////////////
?>

* now i need to get for every color its images src ..
i tried this but no way 

<?php
    /////////////////////////////////////////////////////////////////////
        $html='
            <table>
                <tr>
                    <td colspan="2">
                        <span>green</span>
                        <img src="green.gif" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <span>yellow</span>
                        <img src="yellow.gif" />
                    </td>
                    <td>
                        <span>red</span>
                        <img src="red.gif" />
                    </td>
                </tr>
            </table>
            <table>
                <tr>
                    <td>
                        <span>black</span>
                        <img src="black.gif" />
                    </td>
                </tr>
            </table>
        ';
    /////////////////////////////////////////////////////////////////////
        $dom = new DOMDocument();
        $dom->loadHTML($html);
        $xpath = new DomXPath($dom);
    /////////////////////////////////////////////////////////////////////
        $evaluate = $xpath->evaluate('.//table/tr/td/span');
        for($x=0,$results=''; $x<$evaluate->length; $x++)
        {
            $x1=$x+1;

            $query1 = $xpath->query('.//table/tr/td/span');
            $color = $query1->item($x)->nodeValue;

            $query2 = $xpath->query('.//table/tr/td/span['.$x1.']/../img');
            $image = $query2->item($x)->getAttribute("src");
            $results .= "color $x1 is : $color - and- image $x1 is : $image<br/>";
        }
        echo $results;
    /////////////////////////////////////////////////////////////////////
?>

请帮助::

i have a very important question that seem to be difficult for me ..
simply i need to select child node from parent node of current node !!
i know that we use (..) to select parent node .
but in my case it not enough ..
this is my php code to get all color values

<?php
    /////////////////////////////////////////////////////////////////////
        $html='
            <table>
                <tr>
                    <td colspan="2">
                        <span>green</span>
                        <img src="green.gif" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <span>yellow</span>
                        <img src="yellow.gif" />
                    </td>
                    <td>
                        <span>red</span>
                        <img src="red.gif" />
                    </td>
                </tr>
            </table>
            <table>
                <tr>
                    <td>
                        <span>black</span>
                        <img src="black.gif" />
                    </td>
                </tr>
            </table>
        ';
    /////////////////////////////////////////////////////////////////////
        $dom = new DOMDocument();
        $dom->loadHTML($html);
        $xpath = new DomXPath($dom);
    /////////////////////////////////////////////////////////////////////
        $evaluate = $xpath->evaluate('.//table/tr/td/span');
        for($x=0,$results=''; $x<$evaluate->length; $x++)
        {
            $x1=$x+1;

            $query1 = $xpath->query('.//table/tr/td/span');
            $color = $query1->item($x)->nodeValue;
            $results .= "color $x1 is : $color<br/>";
        }
        echo $results;
    /////////////////////////////////////////////////////////////////////
?>

* now i need to get for every color its images src ..
i tried this but no way 

<?php
    /////////////////////////////////////////////////////////////////////
        $html='
            <table>
                <tr>
                    <td colspan="2">
                        <span>green</span>
                        <img src="green.gif" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <span>yellow</span>
                        <img src="yellow.gif" />
                    </td>
                    <td>
                        <span>red</span>
                        <img src="red.gif" />
                    </td>
                </tr>
            </table>
            <table>
                <tr>
                    <td>
                        <span>black</span>
                        <img src="black.gif" />
                    </td>
                </tr>
            </table>
        ';
    /////////////////////////////////////////////////////////////////////
        $dom = new DOMDocument();
        $dom->loadHTML($html);
        $xpath = new DomXPath($dom);
    /////////////////////////////////////////////////////////////////////
        $evaluate = $xpath->evaluate('.//table/tr/td/span');
        for($x=0,$results=''; $x<$evaluate->length; $x++)
        {
            $x1=$x+1;

            $query1 = $xpath->query('.//table/tr/td/span');
            $color = $query1->item($x)->nodeValue;

            $query2 = $xpath->query('.//table/tr/td/span['.$x1.']/../img');
            $image = $query2->item($x)->getAttribute("src");
            $results .= "color $x1 is : $color - and- image $x1 is : $image<br/>";
        }
        echo $results;
    /////////////////////////////////////////////////////////////////////
?>

please help ::

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

音盲 2024-12-06 14:40:04

试试这个:

... initiate/load dom+xpath ...
$res = $xpath->query('//table/tr/td');
foreach($res as $td) {
    $spans = $td->getElementsByTagName('span');
    $color = $spans[0]->nodeValue;
    $imgs = $td->getELementsByTagName('img');
    $src = $imgs[0]->getAttribute('src');
}

没有必要运行完整的 xpath 查询两次。 DOM 树中的每个节点都完全了解其父节点和子节点。

Try this:

... initiate/load dom+xpath ...
$res = $xpath->query('//table/tr/td');
foreach($res as $td) {
    $spans = $td->getElementsByTagName('span');
    $color = $spans[0]->nodeValue;
    $imgs = $td->getELementsByTagName('img');
    $src = $imgs[0]->getAttribute('src');
}

There's no need to run full xpath queries twice. Every node in a DOM tree is fully aware of its parents and children.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文