PHP Как дать блоку кода родительский узел - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть эта структура HTML;и мне нужно удалить все после

<span class="Title_Blue">

или, по крайней мере, положить блок внутри div.(Тогда я могу манипулировать им.)

Есть ли в любом случае, я могу сделать это с помощью xpath?

Я могу легко поместить тег в div, но проблема в том, что код, который я хочуохватить div - это все на одном уровне.

Спасибо !!

<body>
<div class="article_text">
    <div id="text">

        <p class="paragraph">
            <strong> [text] </strong>
        </p>
        <div>
            <strong> [text] </strong>
        </div>
        <strong>
            <br> [Title] <br>
        </strong>
        <div style="text-align: justify;">
            <br> [text]
        </div>
        <div style="text-align: justify;">
            <br> [text]
        </div>

        <span class="Title_Blue"> [text] </span>
        <br>
        <p> ... </p>
        <div style="text-align: justify;"> [text] </div>
        <div style="text-align: justify;"> [text] </div>
        <div style="text-align: justify;"> [text] </div>
        <div style="text-align: justify;"> [text] </div>

        <span class="Title_Blue"> [text] </span>
        <br>
        <p> ... </p>
        <div style="text-align: justify;"> [text] </div>
        <div style="text-align: justify;"> [text] </div>
        <div style="text-align: justify;"> [text] </div>
        <div style="text-align: justify;"> [text] </div>

        <span class="Title_Blue"> [text] </span>
        <br>
        <p> ... </p>
        <div style="text-align: justify;"> [text] </div>
        <div style="text-align: justify;"> [text] </div>
        <div style="text-align: justify;"> [text] </div>
        <div style="text-align: justify;"> [text] </div>

    </div>
</div>
</body>

EDITED

Я пробовал это:

$html = $data
$doc = new DOMDocument();
@$doc->loadHTML('<?xml encoding="UTF-8">' . $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXpath($doc);
$contents = $xpath->query('//*[@class="Title_Blue"]');
foreach ($contents as $content) {
    $div = $doc->createElement('div');
    $div->setAttribute('class', 'DELETE_ME');
    $content->parentNode->replaceChild($div, $content);
    $div->appendChild($content);
}

РЕДАКТИРОВАНИЕ 2

удалось решить с помощью этого кода:

$html = $data
$doc = new DOMDocument();
@$doc->loadHTML('<?xml encoding="UTF-8">' . $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXpath($doc);
$contents = $xpath->query('//*[@class="Title_Blue"] | //*[@class="Title_Blue"]/following-sibling::*');
foreach ($contents as $content) {
    $content->parentNode->removeChild($content);
}

Благодаря Andersson!

1 Ответ

0 голосов
/ 23 ноября 2018

Если вам нужно выбрать все после span, включая span, попробуйте

//span[@class="Title_Blue"]/preceding-sibling::*[1]/following-sibling::*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...