Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.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,DomeElement仅获取当前节点的值_Php_Html_Domdocument - Fatal编程技术网

PHP,DomeElement仅获取当前节点的值

PHP,DomeElement仅获取当前节点的值,php,html,domdocument,Php,Html,Domdocument,这是我的代码: <?php $html = '<a href="url">My Asked text for value <span class="time">15min</span></a>'; $dom = new DOMDocument; @$dom->loadHTML($html); $links = $dom->getElementsByTagName('a'); foreach ($links as $link)

这是我的代码:

<?php

$html = '<a href="url">My Asked text for value <span class="time">15min</span></a>';

$dom = new DOMDocument;
@$dom->loadHTML($html);

$links = $dom->getElementsByTagName('a');
foreach ($links as $link){print_r($link);
         echo $link->nodeValue."\n"; // returns: My Asked text for value 15min
}

您可以使用替换方法。或者,如果字符串每次都是新的“15Min或20Min”,则可以使用正则表达式:)

或正则表达式


您可以使用replace方法。或者,如果字符串每次都是新的“15Min或20Min”,则可以使用正则表达式:)

或正则表达式


这似乎还有很长的路要走,但是你可以把标签去掉

echo strip_tags($link->nodeValue."\n");

这似乎还有很长的路要走,但是你可以把标签去掉

echo strip_tags($link->nodeValue."\n");

确保可以使用解析器方法:

<?php
$html = '<a href="url">My Asked text for value <span class="time">15min</span></a>';

$dom = new DOMDocument;
@$dom->loadHTML($html);

$links = $dom->getElementsByTagName('a');
foreach ($links as $link){
    if ($link->hasChildNodes()) {
        echo $link->childNodes[0]->nodeValue;
    } else {
        echo $link->nodeValue;
    }
}
然而,这是值得怀疑的,如果这是有意义的,规则哪个孩子使用似乎有点模糊


更新:

对于过时的php版本<5.6.3,您需要稍微修改版本,因为类
DomNodeList
仅从该版本开始实现
ArrayAccess
接口:

<?php
$html = '<a href="url">My Asked text for value <span class="time">15min</span></a>';

$dom = new DOMDocument;
@$dom->loadHTML($html);

$links = $dom->getElementsByTagName('a');
foreach ($links as $link){
    if ($link->hasChildNodes()) {
        echo $link->childNodes->item(0)->nodeValue;
    } else {
        echo $link->nodeValue;
    }
}

确保可以使用解析器方法:

<?php
$html = '<a href="url">My Asked text for value <span class="time">15min</span></a>';

$dom = new DOMDocument;
@$dom->loadHTML($html);

$links = $dom->getElementsByTagName('a');
foreach ($links as $link){
    if ($link->hasChildNodes()) {
        echo $link->childNodes[0]->nodeValue;
    } else {
        echo $link->nodeValue;
    }
}
然而,这是值得怀疑的,如果这是有意义的,规则哪个孩子使用似乎有点模糊


更新:

对于过时的php版本<5.6.3,您需要稍微修改版本,因为类
DomNodeList
仅从该版本开始实现
ArrayAccess
接口:

<?php
$html = '<a href="url">My Asked text for value <span class="time">15min</span></a>';

$dom = new DOMDocument;
@$dom->loadHTML($html);

$links = $dom->getElementsByTagName('a');
foreach ($links as $link){
    if ($link->hasChildNodes()) {
        echo $link->childNodes->item(0)->nodeValue;
    } else {
        echo $link->nodeValue;
    }
}

只需更改此代码行:

echo $link->nodeValue."\n";
关于这一点:

echo $link->childNodes->item(0)->nodeValue."\n";
// output "My Asked text for value" 

检查此代码行,只需更改此代码行:

echo $link->nodeValue."\n";
关于这一点:

echo $link->childNodes->item(0)->nodeValue."\n";
// output "My Asked text for value" 

检查此

我的NodeValue中有任何标记我的NodeValue中有任何标记PHP致命错误:无法将DOMNodeList类型的对象用作array@Nabi啊,这意味着你有一个非常过时的php版本,我会找一个解决办法…@Nabi好的,我发布了一个变通方法,该方法也适用于较旧的php版本。@arkascha检查一下。。。使用php版本选择框并执行代码。哪个代码部分在PHP的较低版本上没有给出错误?第二个代码段适用于所有PHP版本(测试版本为7.1)。第一个代码段在>5.6.3版本上运行良好。因此,这是一个编辑建议。我认为在你的回答中纠正这一点会使它更有效。@PeterDarmis我真的不明白你的意思。是的,第一个版本仅适用于5.6.3以上版本,第二个版本始终有效。我已经说过了。那么你的建议是什么?只提供第二个版本?我强烈反对这种说法:这是一种常见的习惯,即为了向后兼容而从不使用任何新功能。为什么要这样做?第一个版本要优雅得多,我认为支持过时的php版本没有什么动机……php致命错误:无法将DOMNodeList类型的对象用作array@Nabi啊,这意味着你有一个非常过时的php版本,我会找一个解决办法…@Nabi好的,我发布了一个变通方法,该方法也适用于较旧的php版本。@arkascha检查一下。。。使用php版本选择框并执行代码。哪个代码部分在PHP的较低版本上没有给出错误?第二个代码段适用于所有PHP版本(测试版本为7.1)。第一个代码段在>5.6.3版本上运行良好。因此,这是一个编辑建议。我认为在你的回答中纠正这一点会使它更有效。@PeterDarmis我真的不明白你的意思。是的,第一个版本仅适用于5.6.3以上版本,第二个版本始终有效。我已经说过了。那么你的建议是什么?只提供第二个版本?我强烈反对这种说法:这是一种常见的习惯,即为了向后兼容而从不使用任何新功能。为什么要这样做?第一个版本要优雅得多,我认为支持过时的php版本没有什么动机……请用php版本检查这个游戏并检查输出。请用php版本检查这个游戏并检查输出。