簡體   English   中英

使用PHP的DOMXPath DOM解析器:跳過一個類

[英]DOMXPath DOM parser with PHP: Skip a class

我想跳過第一個"a" <a href="URL#" title="TITLE">TITLE</a>

並選擇所有其他已發布的課程

$models = $xpath->query("//p[@class='posted-in']//a");
    for ($i = 0; $i < $models->length; $i++) {
        $result->add_model($models->item($i)->getAttribute('a'));
    }

HTML:

<p class="posted-in">
            Posted in <a href="URL#" title="TITLE">TITLE</a>
on Mar 16, 2017 featuring <a href="URL#">MODEL1</a>, 
                          <a href="URL#">MODEL2</a>, 
                          <a href="URL#">MODEL2</a></p>

我將此代碼與標簽“ alt”一起使用

$models = $xpath->query("//li[@class='models']//img");
    for ($i = 0; $i < $model->length; $i++) {
        $result->add_model($models->item($i)->getAttribute('alt'));
    }

但我很困惑...我怎么能選擇a文本?

元素節點的文本內容在屬性DOMElement::$textContent可用。 該值包括任何后代文本節點。

如果您需要忽略結果中的第一個節點,則可以添加條件。

$html = <<<'HTML'
<p class="posted-in">
            Posted in <a href="URL#1" title="TITLE">TITLE</a>
on Mar 16, 2017 featuring <a href="URL#2">MODEL1</a>, 
                          <a href="URL#3">MODEL2</a>, 
                          <a href="URL#4">MODEL2</a></p>
HTML;

$document = new DOMDocument();
$document->loadHtml($html);
$xpath = new DOMXpath($document);

$expression = '//p[@class="posted-in"]/a[position() > 1]';

foreach ($xpath->evaluate($expression) as $a) {
  var_dump($a->textContent, $a->getAttribute('href'));
}

輸出:

string(6) "MODEL1"
string(5) "URL#2"
string(6) "MODEL2"
string(5) "URL#3"
string(6) "MODEL2"
string(5) "URL#4"

暫無
暫無

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

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