#javascript #cheerio
#javascript #cheerio
Вопрос:
Как сказать cheerio НЕ изменять атрибуты в нижний регистр?
В настоящее время cheerio
превращается fooBar
в foobar
. как этого НЕ делать?
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);