Как игнорировать cheerio из атрибутов turn в нижний регистр?

#javascript #cheerio

#javascript #cheerio

Вопрос:

Как сказать 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 });
 

Я пытаюсь добавить lowerCaseAttributeNames в соответствии с ответом в github, но это не помогает:

 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>
 

ДОБАВТЕ

Я искал lowerCaseAttributeNames в Github, но он существует только в типах, не уверен, что это повлияет на код: (

Ответ №1:

После того, как я немного покопался в cheerio исходном коде и многих других библиотеках, я понимаю, что вы можете использовать cheerio , чтобы получить то, что хотите.

во-первых, вы должны загрузить содержимое с помощью xmlMode:true и использовать xmlMode:false при вызове html() :

 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>
*/
 

Ответ №2:

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);