PHP, DOMElement 仅获取当前节点的值
PHP, DOMElement get value only current node
这是我的代码:
<?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
}
它returns:我要求的文字价值15分钟
但我只想要:我要求的价值文本
如何解决这个问题,谢谢
您可以使用替换方法。或者,如果字符串每次都是新的“15Min 或 20Min”,那么您可以使用正则表达式:)
或正则表达式 preq_match
$newString = str_replace("15min", "", $link->nodeValue);
似乎还有很长的路要走,但你可以去掉标签。
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;
}
}
输出显然是:
My Asked text for value
这是值得怀疑的,但是如果这有意义,规则 which child 使用看起来有点模糊...
更新:
对于过时的 php 版本 < 5.6.3 你需要一个稍微修改的版本,因为 class 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"
在这个example
中查看
这是我的代码:
<?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
}
它returns:我要求的文字价值15分钟
但我只想要:我要求的价值文本
如何解决这个问题,谢谢
您可以使用替换方法。或者,如果字符串每次都是新的“15Min 或 20Min”,那么您可以使用正则表达式:)
或正则表达式 preq_match
$newString = str_replace("15min", "", $link->nodeValue);
似乎还有很长的路要走,但你可以去掉标签。
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;
}
}
输出显然是:
My Asked text for value
这是值得怀疑的,但是如果这有意义,规则 which child 使用看起来有点模糊...
更新:
对于过时的 php 版本 < 5.6.3 你需要一个稍微修改的版本,因为 class 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"
在这个example
中查看