Здравствуйте, я пытаюсь управлять DOMDocument из строки. Моя строка выглядит следующим образом:PHP - DOMDocument - получить предыдущий элемент и его атрибуты данных
$String =
<p>
<div class="ST" data-start="1" data-end="5">
<span>WORD1</span><span>WORD2</span>
</div>
</p>
<p>
WORD3 WORD4
</p>
<p>
<div class="ST" data-start="6" data-end="10">
<span>WORD5</span><span>WORD6</span>
</div>
</p>
Моя цель состоит в том, чтобы положить слова WORD3
и WORD4
в <div>
теге как WORD1
WORD2
и WORD5
WORD6
для первого и последнего <p>
тегов. Кроме того, мне нужно получить data-start
data-end
предыдущего p > div
и получить, наконец, этот:
$String =
<p>
<div class="ST" data-start="1" data-end="5">
<span>WORD1</span><span>WORD2</span>
</div>
</p>
<p>
<div class="ST" data-start="1" data-end="5">
WORD3 WORD4
</div>
</p>
<p>
<div class="ST" data-start="6" data-end="10">
<span>WORD5</span><span>WORD6</span>
</div>
</p>
мне удалось поставить word3 и WORD4 в <div>
, но я не знаю, как получить предыдущий элемент p > div
и получить его атрибуты data-start
и data-end
...
Мой код:
public function reverseTransform($value) {
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadHTML($value);
$pTags = $dom->getElementsByTagName('p');
$TagFull='';
foreach ($pTags as $pTag) {
$valuePTagFull = $this->DOMinnerHTML($pTag);
if (strpos($valuePTagFull,'<div') === false) {
$valuePTagFull = "<div class='st'>".$valuePTagFull."</div>";
}
$TagFull .= $valuePTagFull;
}
}
private function DOMinnerHTML(DOMNode $element)
{
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child) {
$innerHTML .= $element->ownerDocument->saveHTML($child);
}
return $innerHTML;
}
В самом деле, для каждого <p>
, которые имеют WORDx
в но без <div>
, я обернуть WORDx
в <div>
с data-start
и data-end
атрибутов предыдущего <p> >> <div>
Но как выбрать и получить атрибуты из предыдущего элемента с DOM, XML или другим способом?
Спасибо!
привет! что такое «$ спички» на 2-й строке? – Zagloo
@ Zagloo Свой массив, содержащий 2 целых числа, которые вам нужны. Однако это не очень хорошая практика, вы можете захотеть найти альтернативные способы получения атрибутов div. – Evan