如何忽略Cheerio将属性转换为小写?

4
如何告诉 Cheerio 不要将属性名转换为小写?
目前,Cheerio 会将 fooBar 转换为 foobar。如何避免这种情况发生?

codesandbox.io

const cheerio = require("cheerio");

const html = `
  <div>
   <h4></h4>
   <img src="">
   <input>
   <p fooBar></p>
  
  </div>

`;

const $ = cheerio.load(html);

const output = $.html();

console.log({ output });

我尝试根据github答案添加lowerCaseAttributeNames,但这并没有起到帮助作用。
const $ = cheerio.load(html, { lowerCaseAttributeNames: false });

结果:

<html><head></head><body><div>
   <h4></h4>
   <img src>
   <input>
   <p foobar></p> <------------------foobar. expected: fooBar
  
  </div>

</body></html>

我尝试使用xmlMode,但它会造成闭合问题:

 <div>
   <h4/>
   <img src="">
   <input>
   <p fooBar=""/>
  
  </input></img></div>

更新

我在Github上搜索了lowerCaseAttributeNames,但是它只存在于类型中,不确定它是否对代码产生影响 :(

2个回答

3

经过我对cheerio源代码和其他许多库的挖掘,我了解到您可以使用cheerio来获取您想要的内容。

首先,您应该通过xmlMode:true加载内容,并在调用html()时使用xmlMode:false

const $ = cheerio.load(html, { xmlMode: true });
const output = $.html({ xmlMode: false });

完整的代码也可以在 codesandbox.io 上找到。
const cheerio = require("cheerio");

console.clear();

const html = `
  <div>
   <h4></h4>
   <img src="">
   <input>
   <p fooBar></p>
  
  </div>

`;

const $ = cheerio.load(html, { xmlMode: true, lowerCaseAttributeNames: false });

const output = $.html({ xmlMode: false });

console.log({ output });

/*
<div>
   <h4></h4>
   <img src>
   <input>
   <p fooBar></p>
  
  </div>
*/

1
Cheerio默认使用parser5,而lowerCaseAttributeName是htmlparser2的属性。
您可以尝试在开始时加载htmlparser2,如他们的github页面所示:
// Usage as of htmlparser2 version 3:
const htmlparser2 = require('htmlparser2');
const dom = htmlparser2.parseDOM(document, options);

const $ = cheerio.load(dom);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接