Search code examples
perlmojolicious

Mojo::DOM manipulation


I would like to remove second <p> node and its content from:

 <div>
   <p>1<div>D</div></p>

   <p>2</p>
 </div>

Checked children method, but it also returns all descending nodes, while I would like to get first level <p> nodes.

perl -Mojo -E'
say for @{ x("
    <div>
    <p>1<div>D</div></p>

    <p>2</p>
    </div>
  ")->at("div")->children }
'

output

<p>1</p>
<div>D</div>
<p>2</p>

Solution

  • You probably want:

    perl -Mojo -E'
    say for @{ x("
        <div>
        <p>1<div>D</div></p>
    
        <p>2</p>
        </div>
      ")->find("div > p")}
    '
    

    output

    <p>1</p>
    <p>2</p>
    

    But i'm unsure that this is what do you want..