Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在HTML字符串(NodeJs)中展开不必要的嵌套div_Html_Node.js_Nested_Jsdom_Unwrap - Fatal编程技术网

在HTML字符串(NodeJs)中展开不必要的嵌套div

在HTML字符串(NodeJs)中展开不必要的嵌套div,html,node.js,nested,jsdom,unwrap,Html,Node.js,Nested,Jsdom,Unwrap,是否有一个好的npm包可以删除在nodeJS服务器上运行的html字符串中不必要的嵌套标记(无浏览器DOM)?我尝试过清理html,但似乎不可能做到这一点 我收到用户发送的电子邮件html,因此我无法控制输入格式,有时会附带不必要的嵌套标记,如: <div> <div> <div> <div> <div>Hey Bob:<br /></div> <di

是否有一个好的npm包可以删除在nodeJS服务器上运行的html字符串中不必要的嵌套标记(无浏览器DOM)?我尝试过清理html,但似乎不可能做到这一点

我收到用户发送的电子邮件html,因此我无法控制输入格式,有时会附带不必要的嵌套标记,如:

<div>
  <div>
    <div>
      <div>
        <div>Hey Bob:<br /></div>
        <div>
          I wanted to see if you had a chance to review this. Three things come to mind:<br />
        </div>
        <ol>
          <li>blah<br /></li>
          <li>blah<br /></li>
          <li>blah<br /></li>
        </ol>
      </div>
    </div>
  </div>
</div>

嘿,鲍勃:
我想看看你是否有机会回顾一下。我想到三件事:
  • 废话
  • 废话
  • 废话
  • 我想打开外部div(以及字符串中任何其他不必要的包装标记),直到得到如下结果:

    <div>
      <div>Hey Bob:<br /></div>
      <div>
        I wanted to see if you had a chance to review this. Three things come to mind:<br />
      </div>
      <ol>
        <li>blah<br /></li>
        <li>blah<br /></li>
        <li>blah<br /></li>
      </ol>
    </div>
    
    
    嘿,鲍勃:
    我想看看你是否有机会回顾一下。我想到三件事:
  • 废话
  • 废话
  • 废话

  • 我尝试使用cheerio和jsdom,但它们似乎都没有像python中的beautifulsoup那样的展开函数

    不确定是什么软件包可以做到这一点,但在您的情况下,可以使用一些基本的普通javascript轻松做到这一点:

    const bodyNode = document.querySelector("body");
    
    function ParseHtml(node)
    {
        if (node.firstElementChild.nodeName === 'BR')
        {
            return node.parentNode.outerHTML;
        }
        return ParseHtml(node.firstElementChild);
    }
    
    console.log(ParseHtml(bodyNode));
    

    我能想到的最简单的方法是删除制表符和换行符,然后用一个副本替换任何背靠背重复的内容。会有点正则表达式。