Bonjour,

Voila j'essaye de parser du code html pour qu'il soit valide pour intant article de facebook

Ce que je fais

j'essaye entourer mes balise image avec des balise figure et si il y a une source je lui ajoute une balise enfant <figcaption><cite>xxx</figcation></cite>
voice mon code de test

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$html = <<<EOF
<p>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
</p>
<p>
    <img src="xxxxx1" />
    <span class="sourceimgtest">x1</span>
</p>

<p>
    <img src="xxxxx2">
</p>
<p>
    <img src="xxxxx3">
</p>
<p>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
</p>
<p>
    <img src="xxxxx4">
    <span class="sourceimgtest">x4</span>
</p>
<p>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
</p>
<p>
    <img src="xxxxx5">
</p>

<p>
     <img src="xxxxx6">

     <img src="xxxxx7">
    <span class="sourceimgtest">x7</span>

     <img src="xxxxx8">
     <span class="sourceimgtest">x8</span>
</p>
EOF;

libxml_use_internal_errors(true);
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);

$matches = $xpath->query('//p');

if($matches->length > 0 ){

    foreach($matches as $node){
        $node_img_match = $node->getElementsByTagName('img');
        if($node_img_match->length > 0){
            $i = 0;
            foreach( $node_img_match as $node_img){
                //echo $node_img_match->getAttribute('src').'<br />';

                $figure_node = $dom->createElement('figure');
                $figure_node->appendChild($node_img->cloneNode());

                if($node->getElementsByTagName('span')[$i+1]) {

                    $figCaption_node = $dom->createElement('figcaption');
                    $cite_node = $dom->createElement('cite',$node->getElementsByTagName('span')[$i]->nodeValue);
                    $figCaption_node->appendChild($cite_node);
                    $figure_node->appendChild($figCaption_node);

                }
                $node->replaceChild($figure_node,$node_img);

            $i++;
            }
        }

    }

}

$contenu = $dom->saveHTML();
echo $contenu;

Ce que je veux

Voici ce que je souhaite en sortie

<html>

<body>
    <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
    </p>
    <p>
        <figure><img src="xxxxx1">
            <figcaption><cite>x1</cite>
            </figcaption>
        </figure><span class="sourceimgtest">x1</span>
    </p>

    <p>
        <figure><img src="xxxxx2">
        </figure>
    </p>
    <p>
        <figure><img src="xxxxx3">
        </figure>
    </p>
    <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
    </p>
    <p>
        <figure><img src="xxxxx4">
            <figcaption><cite>x4</cite>
            </figcaption>
        </figure><span class="sourceimgtest">x4</span>
    </p>
    <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
    </p>
    <p>
        <figure><img src="xxxxx5">
        </figure>
    </p>

    <p>
        <figure>
            <img src="xxxxx6">
        <figure>

        <figure>
            <img src="xxxxx7">
            <figcaption>
                <cite>x7</cite>
            </figcaption>
        <figure>

        <figure>
            <img src="xxxxx8">
            <figcaption>
                <cite>x8</cite>
            </figcaption>
        <figure>

    </p>
</body>

</html>

Ce que j'obtiens

Les premieres balises sont bien entourées mais pas les dernieres et je comprends pas pouquoi

<html>

<body>
    <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
    </p>
    <p>
        <figure>
            <img src="xxxxx1">
            <figcaption>
                <cite>x1</cite>
            </figcaption>
        </figure><span class="sourceimgtest">x1</span>
    </p>

    <p>
        <figure>
            <img src="xxxxx2">
        </figure>
    </p>
    <p>
        <figure>
            <img src="xxxxx3">
        </figure>
    </p>
    <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
    </p>
    <p>
        <figure>
            <img src="xxxxx4">
            <figcaption>
                <cite>x4</cite>
            </figcaption>
        </figure>
        <span class="sourceimgtest">x4</span>
    </p>
    <p>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
    </p>
    <p>
        <figure>
            <img src="xxxxx5">
        </figure>
    </p>

    <p>
        <figure>
            <img src="xxxxx6">
            <figcaption>
                <cite>x7</cite>
            </figcaption>
        </figure>
        <figure>
            <img src="xxxxx7">
            <figcaption>
                <cite>x8</cite>
            </figcaption>
        </figure>
        <span class="sourceimgtest">x7</span>
        <figure>
            <img src="xxxxx8">
        </figure>
        <span class="sourceimgtest">x8</span>
    </p>
</body>

</html>

Aucune réponse