Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP与DOMXPath-如何从这个html树中选择和计数_Php_Domxpath - Fatal编程技术网

PHP与DOMXPath-如何从这个html树中选择和计数

PHP与DOMXPath-如何从这个html树中选择和计数,php,domxpath,Php,Domxpath,我需要数一数这些项目中有多少是开放的,有四种类型:简单、中等、困难和不想要。所有这些类型都是div中的值。我需要从计数中排除“不需要”类型。请注意,“打开”和“关闭”值周围有不同数量的空格。这是html结构: <table> <tbody> <tr> <td> <div>Difficult</div> </td>

我需要数一数这些项目中有多少是开放的,有四种类型:简单、中等、困难和不想要。所有这些类型都是div中的值。我需要从计数中排除“不需要”类型。请注意,“打开”和“关闭”值周围有不同数量的空格。这是html结构:

<table>
    <tbody>
        <tr>
            <td>
                <div>Difficult</div>
            </td>
            <td>Name</td>
            <td>  Open </td>
        </tr>
        <tr>
            <td>
                <div>Easy</div>
            </td>
            <td>Name</td>
            <td> Closed  </td>
        </tr>
        <tr>
            <td>
                <div>Easy</div>
            </td>
            <td>Name</td>
            <td>   Open   </td>
        </tr>
        <tr>
            <td>
                <div>Medium</div>
            </td>
            <td>Name</td>
            <td>Open </td>
        </tr>
        <tr>
            <td>
                <div>Easy</div>
            </td>
            <td>Name</td>
            <td> Open     </td>
        </tr>
        <tr>
            <td>
                <div>Medium</div>
            </td>
            <td>Name</td>
            <td>  Closed</td>
        </tr>
        <tr>
            <td>
                <div>Easy</div>
            </td>
            <td>Name</td>
            <td>Closed </td>
        </tr>
        <tr>
            <td>
                <div>Not-wanted</div>
            </td>
            <td>Name</td>
            <td> Open </td>
        </tr>
        <tr>
            <td>
                <div>Difficult</div>
            </td>
            <td>Name</td>
            <td>Open</td>
        </tr>
        ............
我对DOMXPath有非常基本的了解,所以它对我来说太复杂了,因为我只能创建简单的查询

有人能帮忙吗


提前感谢。

基于示例中的数据,我认为您可以将xpath表达式调整为此,以获得所有符合您的条件的

//table/tbody/tr[normalize space(td[3]/text())=“Open”和 td[1]/div/text()!=“不需要”]

$elements
则为类型,然后可以获取
length
属性以获取列表中的节点数

例如:

$source = <<<SOURCE
<table>
    <tbody>
        <tr>
            <td>
                <div>Difficult</div>
            </td>
            <td>Name</td>
            <td>  Open </td>
        </tr>
        <tr>
            <td>
                <div>Easy</div>
            </td>
            <td>Name</td>
            <td> Closed  </td>
        </tr>
        <tr>
            <td>
                <div>Easy</div>
            </td>
            <td>Name</td>
            <td>   Open   </td>
        </tr>
        <tr>
            <td>
                <div>Medium</div>
            </td>
            <td>Name</td>
            <td>Open </td>
        </tr>
        <tr>
            <td>
                <div>Easy</div>
            </td>
            <td>Name</td>
            <td> Open     </td>
        </tr>
        <tr>
            <td>
                <div>Medium</div>
            </td>
            <td>Name</td>
            <td>  Closed</td>
        </tr>
        <tr>
            <td>
                <div>Easy</div>
            </td>
            <td>Name</td>
            <td>Closed </td>
        </tr>
        <tr>
            <td>
                <div>Not-wanted</div>
            </td>
            <td>Name</td>
            <td> Open </td>
        </tr>
        <tr>
            <td>
                <div>Difficult</div>
            </td>
            <td>Name</td>
            <td>Open</td>
        </tr>
    </tbody>
</table>
SOURCE;

$doc = new DOMDocument();
$doc->loadHTML($source);
$doc->preserveWhiteSpace = false;
$xpath = new DOMXPath($doc);
$elements = $xpath->query("//table/tbody/tr[normalize-space(td[3]/text()) = 'Open' and td[1]/div/text() != 'Not-wanted']");
echo $elements->length;
$source=query(“//table/tbody/tr[normalize space(td[3]/text())='Open'和td[1]/div/text()!='Not wanted']);
echo$元素->长度;
这将导致:

五,


根据示例中的数据,我认为您可以将xpath表达式调整为此,以获得所有符合您的条件的

//table/tbody/tr[normalize space(td[3]/text())=“Open”和 td[1]/div/text()!=“不需要”]

$elements
则为类型,然后可以获取
length
属性以获取列表中的节点数

例如:

$source = <<<SOURCE
<table>
    <tbody>
        <tr>
            <td>
                <div>Difficult</div>
            </td>
            <td>Name</td>
            <td>  Open </td>
        </tr>
        <tr>
            <td>
                <div>Easy</div>
            </td>
            <td>Name</td>
            <td> Closed  </td>
        </tr>
        <tr>
            <td>
                <div>Easy</div>
            </td>
            <td>Name</td>
            <td>   Open   </td>
        </tr>
        <tr>
            <td>
                <div>Medium</div>
            </td>
            <td>Name</td>
            <td>Open </td>
        </tr>
        <tr>
            <td>
                <div>Easy</div>
            </td>
            <td>Name</td>
            <td> Open     </td>
        </tr>
        <tr>
            <td>
                <div>Medium</div>
            </td>
            <td>Name</td>
            <td>  Closed</td>
        </tr>
        <tr>
            <td>
                <div>Easy</div>
            </td>
            <td>Name</td>
            <td>Closed </td>
        </tr>
        <tr>
            <td>
                <div>Not-wanted</div>
            </td>
            <td>Name</td>
            <td> Open </td>
        </tr>
        <tr>
            <td>
                <div>Difficult</div>
            </td>
            <td>Name</td>
            <td>Open</td>
        </tr>
    </tbody>
</table>
SOURCE;

$doc = new DOMDocument();
$doc->loadHTML($source);
$doc->preserveWhiteSpace = false;
$xpath = new DOMXPath($doc);
$elements = $xpath->query("//table/tbody/tr[normalize-space(td[3]/text()) = 'Open' and td[1]/div/text() != 'Not-wanted']");
echo $elements->length;
$source=query(“//table/tbody/tr[normalize space(td[3]/text())='Open'和td[1]/div/text()!='Not wanted']);
echo$元素->长度;
这将导致:

五,