首页 > 解决方案 > Nodejs:从 HTML 获取纯文本但保留有序和无序列表

问题描述

我试图从一段 HTML 代码中获取纯文本,但想保留有序或无序列表中的编号。到目前为止,node-html-parsercheerio等库还没有保留这些信息。

意思是说,给定这样的 HTML:

<ol>
        <li>Number 1
            <ol style="list-style-type: lower-alpha;">
                <li>Number a</li>
                <li>Number b</li>
            </ol>
        </li>
    
        <li>Number 2
            <ol style="list-style-type: lower-alpha;">
                <li>Number a
                    <ol style="list-style-type: lower-roman;">
                        <li>Number i</li>
                        <li>Number ii</li>
                    </ol>
                </li>
                <li>Number b</li>
                <li>Number c</li>
            </ol>
        </li>
    </ol>

我想获得:

1. Number 1
   a. Number a
   b. Number b
2. Number 2
   a. Number a
      i. Number i
      ii. Number ii
   b. Number b
   c. Number c

我用 Nodejs 编写。

标签: htmlnode.js

解决方案


    import {
    parse
    } from 'node-html-parser';
    var html = `<ol>
    <li>Number 1
     <ol style="list-style-type: lower-alpha;">
         <li>Number a</li>
         <li>Number b</li>
     </ol>
  </li>
<li>Number 2
    <ol style="list-style-type: lower-alpha;">
        <li>Number a
            <ol style="list-style-type: lower-roman;">
                <li>Number i</li>
                <li>Number ii</li>
            </ol>
        </li>
        <li>Number b</li>
        <li>Number c</li>
    </ol>
</li>
</ol>`
const root = parse(html);

var children = root.querySelector('ol')
var m = children.innerHTML
var lis = parse(m)
var m = lis.text
console.log(JSON.stringify(m))

输出将是

 </p>

Number 1 
     
        Number a 
        Number b 
     
 
Number 2 
     
        Number a 
             
                Number i 
                Number ii 
             
         
        Number b 
        Number c 
     

推荐阅读