Javascript xml-IO中的自动关闭标记空间问题

Javascript xml-IO中的自动关闭标记空间问题,javascript,xml,xml-parsing,tags,cheerio,Javascript,Xml,Xml Parsing,Tags,Cheerio,我的问题是在cheerio解析期间没有保留XML close标记中的空格 const xmlstr = <plugin> <testId /> <classId /> <goalsone> <goals /> <info>new</info> </goalsone> </plugin>; const $one = cheerio.load(xmlstr, { xmlMode: true

我的问题是在cheerio解析期间没有保留XML close标记中的空格

const xmlstr = <plugin> <testId /> <classId /> <goalsone> <goals /> <info>new</info> </goalsone> </plugin>;

const $one = cheerio.load(xmlstr, { xmlMode: true });

console.log( $one.xml() );
constxmlstr=new;
const$one=cheerio.load(xmlstr,{xmlMode:true});
log($one.xml());
返回

<plugin> <testId/> <classId/> <goalsone> <goals/> <info>new</info> </goalsone> </plugin>
新建

这里的输出是针对
的,但初始状态是
,在close标记的末尾有一个空格,与
的情况相同。我想用tag保留自动关闭的标记空间。我不想更改XML的当前格式。

不幸的是,我认为您必须分叉
cheerio
并更新其
XML
代码。在这方面似乎没有任何选项,将生成的XML作为字符串进行后处理会有问题

它看起来像是使用了序列化,这是从的默认导出,您只需更改当前的内容:

您可以为此添加一个选项,并向他们发送拉取请求。:-)



你说过你的一些标签有空间,而有些没有。我认为在这种情况下,您最好的选择是进行一次提交,使数据合理化(使其始终有空间或没有空间),而不改变任何其他内容。这样,将来的提交就不会有自动关闭标记结尾不一致的问题。如果您这样做,最好还是坚持使用cheerio的默认序列化。

如果您真的想确保解析XML并对其进行序列化能够准确地生成您开始使用的词法XML,那么实现这一点的唯一真正方法就是始终以规范的形式维护您的词法XML,或者“规范XML”标准(请参阅),或您自己设计的其他规范表示。不幸的是,您可能会发现在Javascript世界中用于实现这一点的工具/库并不丰富,因此您可能需要设计自己的工具/库


一种更为特殊的方法是通过确保避免“怪癖”来避免最常见的陷阱“序列化时。例如,避免在属性周围使用单引号,避免使用CDATA节,并避免在标记中使用不必要的空格。

空格在XML中没有任何区别。是的。我知道这一点,但我不需要更改,因为如果这是git中的文件,git diff会显示一些修改,但我不需要将这些更改提交给服务器。在某些情况下,我对XML标记值做了一个更改,该更改需要提交,但我不需要这些格式更改。我明白了,我讨厌提交中不相关的更改。完美回复。好的,不错。但是有些情况下,某些标记已经正确关闭,例如,因此我们需要在关闭标记存在之前检查空格,然后再更改它。这是对的吗?@列宁-你最好的选择可能是在一次提交中点击以使数据合理化(在该提交中不做其他更改,只是合理化)。如果您这样做,可能最好使用
cheerio
的默认行为。如果您想保持不一致的数据不变,您可能需要进行一些黑客攻击。
cheerio
使用的DOM处理程序必须在其创建的数据中包含标记的开头和结尾的索引。如果您使用了该选项,您可能能够对照原始字符串进行检查,以决定……是否使用空格。
tag += '/>';
tag += ' />';