簡體   English   中英

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
}

它返回: 我要求的文本值15分鍾

但是我只想要: 我要求的文本的價值

如何解決這個問題

確定可以使用解析器方法:

<?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 

但是值得懷疑的是,使用哪個孩子的規則顯得有些模糊。


更新:

對於版本低於5.6.3的過時php版本,您需要稍作修改的版本,因為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" 

在這個例子中檢查一下

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

在這里str替換

或正則表達式preq_match

  $newString = str_replace("15min", "", $link->nodeValue);

似乎還有很長的路要走,但是您可以去除標簽。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM