Получить HTML-комментарий из $ p-> nodeValue возможно с DomXPath? - PullRequest
0 голосов
/ 03 мая 2018

У меня есть несколько таких абзацев HTML (всегда одинаковая структура):

<p>
    <!-- Gl. 1-4 -->
    \( x(t) = x_0 · t^3 \)
    [!equanchor? &id=`555`!]
</p>

Я удаляю 555 успешно:

$xpath = new DomXPath($dom);
$paragraphs = $xpath->query('//p');
foreach($paragraphs as $p)
{
    $ptext = $p->nodeValue;
    if(strpos($ptext, 'equanchor') !== false)
    {
        // get equation id from anchor
        preg_match('/equanchor\?\s\&id=`(.*)\`/', $ptext, $matches);
        $equationids[] = (int)$matches[1];
    }
}

Теперь мне также понадобится текст из HTML-комментария , то есть <!-- Gl. 1-4 -->, но я не смог выяснить, как использовать для этой цели парсер DOM (DomXPath). К сожалению, $p->nodeValue и $p->textContent не содержат текст комментария.

Этот ответ мне не помог. Я попытался "sub parser", но он не смог прочитать $ptext или $p.

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете использовать функцию comment() XPath (из Доступ к комментариям в XML с использованием XPath ).

Так что в вашем случае, когда вы хотите получить комментарий в теге <p>, вы можете просто добавить строку ...

echo $dom->saveHTML($xpath->query("comment()", $p)[0]);

в вашем цикле foreach (это выбирает узел комментария внутри элемента $p в вашем цикле). Использование [0] для получения первого (при условии, что только один).

Какие выходы ...

<!-- Gl. 1-4 -->
...