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版本检查这个游戏并检查输出。