nodej.s如何检查2个cheerio(xml)对象是否相等

时间:2019-11-22 09:17:46

标签: node.js xml cheerio

我正在使用node.js cheerio模块来解析XML配置文件。我定期从服务器加载此文件以更新配置。

如何检查旧配置是否与新配置完全相同,所以我不需要进行处理?

我尝试使用以下内容:

JSON.stringify(cheerioObj) === JSON.stringify(newCheerioObj)

但是stringify实际上在该对象上返回了undefined(我猜它只有函数。)

我看到可以访问原始XML数据:cheerioObj.xml(),所以我可以比较这两个字符串,但是如果新xml具有完全相同的配置并且仅在不影响数据的某些空格不同的情况下该怎么办?完全没有?这就是为什么我更喜欢比较字符串对象。

1 个答案:

答案 0 :(得分:0)

我建议在加载xml数据时使用normalizeWhitespace选项。您还可以修整输入字符串以增强鲁棒性:

const cheerio = require("cheerio");

const xml1 = '<config><element1 id="1">42</element1><element2 id="2">101</element2></config>';
const cheerioObj1 = cheerio.load(xml1.trim(), {
    xml: {
        normalizeWhitespace: true,
    }
});

const xml2 = '      <config><element1 id="1" >42</element1><element2 id="2"    >101</element2></config>';
const cheerioObj2 = cheerio.load(xml2.trim(), {
    xml: {
        normalizeWhitespace: true,
    }
});

console.log("Comparison result: ", cheerioObj1.xml() === cheerioObj2.xml());