0
段落内のすべてのテキストノードを反復処理する方法を教えてください。結局のところ、彼らは2-3レベルにすることができます。XPath:すべてのテキストノードを反復処理する方法は?
たとえば、次の段落を取る:
<p>Lorem <i>ipsum dolor</i> sit <span>amet, <b><i>consectetur</i> adipisicing</b> elit</span>. Odit, sunt?</p>
は、あなたは、すべてのテキストノードを処理し、その場所にそれらを返すようにしたいです。
$content = '<p>Lorem <i>ipsum dolor</i> sit <span>amet, <b><i>consectetur</i> adipisicing</b> elit</span>. Odit, sunt?</p>';
$html = new DOMDocument();
$html->loadHTML($content);
$xpath = new DOMXpath($html);
$elements = $xpath->query('//descendant-or-self::p//node()');
// My processor (not working...)
foreach ($elements as $element) {
// Processed, only text nodes (not working...)
if ($element->nodeType == 3) {
function() {
return $element->nodeValue = '<span style="background-color: yellow;">' . $element->nodeValue . '</span>';
}
}
// return to the place
echo $element->C14N();
}
あなたは、このような結果を取得する必要があります:
<p>
<span style="background-color: yellow;">Lorem </span>
<i>
<span style="background-color: yellow;">ipsum dolor</span>
</i>
<span style="background-color: yellow;">sit </span>
<span>
<span style="background-color: yellow;">amet, </span>
<b><i>
<span style="background-color: yellow;">consectetur</span>
</i>
<span style="background-color: yellow;">adipisicing</span>
</b>
<span style="background-color: yellow;">elit</span>
</span>
<span style="background-color: yellow;">. Odit, sunt?</span>
</p>
あなたの問題を明確にすることはできますか?既にあなたは段落を繰り返しているようです。では何が効いていないのですか?どのような出力を期待していますか? – Gordon
私はすべてのテキストノードを処理し、すべての場所にそれらを返す必要があります。ええと? –
あなたが何を求めているのか分からないので、私が知っているか分かりません。何を試したのか、なぜこれがうまくいかないのか、あなたの質問を更新してください。次に、予想される結果を追加します。 – Gordon