DOMXPath - Not expected behaviour as in the test. Object is not being wrapped. How to solve it?

梦想与她 提交于 2019-12-11 14:30:37

问题


This is the body of the article I want to manipulate with DOMXPath:

That is the code I am using in order to encapsulate the <figure tag:

        $dom_err = libxml_use_internal_errors(true);
        $dom = new \DOMDocument('1.0', 'utf-8');
        $dom->loadHtml(mb_convert_encoding($arr['body_article'], 'HTML-ENTITIES', 'UTF-8'));
        $xpath = new \DOMXPath($dom);
        //dd($xpath);
        foreach ($xpath->query("//figure") as $img) {
            $p = $dom->createElement("p");
            $p->setAttribute('style', 'text-align:center');
            $img->parentNode->replaceChild($p, $img);
            $p->appendChild($img);
        }
        $body = $dom->saveHTML();

This is the dd($xpath) xml portion:

 xml: """
      <?xml version="1.0" standalone="yes"?>
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
      <html>
        <body>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut vitae ex a arcu tempus tincidunt ac non nulla. Aliquam erat volutpat. Mauris nunc ex, imperdi ▶
          <figure class="image">
            <img src="/storage/12/articles/pictures/body_1574785274232_0d61f8370cad1d412f80b84d143e1257.jpeg"/>
            <figcaption>caption zzzzz</figcaption>
          </figure>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut vitae ex a arcu tempus tincidunt ac non nulla. Aliquam erat volutpat. Mauris nunc ex, imperdi ▶
          <p>&#xA0;</p>
        </body>
      </html>
      """

I want to encapsulate the figure tag into a p tag like so:

<p style="text-align:center">
    <figure class="image">
        <img ..>
        <figcaption ...>
    </figure>
</p>

After following this post I could achieve the goal in the eval test as we can see in the picture below.

But when I run the code I can't see the same result in the browser: The <figure class="image"> object is outside the <p style="text-align:center">. What am I doing wrong?

This is the $arr['body_article']:

"<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur commodo faucibus elit quis dapibus. Morbi at sagittis enim. Maecenas mattis convallis dui eu finibus. Duis turpis lectus, aliquet eu ex eu, gravida condimentum ante. Donec tempor metus in urna fringilla, in porttitor metus commodo. Sed lectus justo, interdum nec eros et, efficitur dictum dui. Nunc tincidunt dolor enim, dictum consectetur orci suscipit non. In iaculis orci dui, varius ullamcorper dolor suscipit at.</p><figure class="image"><img src="/storage/12/articles/pictures/body_1574789541753_8f9c966db248ca8501540ceea1e0901f.jpeg"><figcaption>test caption</figcaption></figure><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur commodo faucibus elit quis dapibus. Morbi at sagittis enim. Maecenas mattis convallis dui eu finibus. Duis turpis lectus, aliquet eu ex eu, gravida condimentum ante. Donec tempor metus in urna fringilla, in porttitor metus commodo. Sed lectus justo, interdum nec eros et, efficitur dictum dui. Nunc tincidunt dolor enim, dictum consectetur orci suscipit non. In iaculis orci dui, varius ullamcorper dolor suscipit at.</p>"

Analysing the source code:

来源:https://stackoverflow.com/questions/59056036/domxpath-not-expected-behaviour-as-in-the-test-object-is-not-being-wrapped-h

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!