xml 中的自闭标签 space 问题 - Cheerio
Self closing tag space issue in xml - Cheerio
我的问题是在 cheerio 解析期间没有在 XML 关闭标记中保留 space。
const xmlstr = <plugin> <testId /> <classId /> <goalsone> <goals /> <info>new</info> </goalsone> </plugin>;
const $one = cheerio.load(xmlstr, { xmlMode: true });
console.log( $one.xml() );
returns
<plugin> <testId/> <classId/> <goalsone> <goals/> <info>new</info> </goalsone> </plugin>
这里的输出来自 <testId/>
和 <classId/>
,但初始状态是 <testId />
,关闭标记末尾有一个 space,与 [= 的情况相同17=]。我想用标签保留自闭标签 space。我不想更改 XML 当前格式。
不幸的是,我认为您必须分叉 cheerio
并更新其 xml
代码。它似乎没有任何选项可以解决这个问题,post-将结果 XML 作为字符串处理会有问题。
看起来像 static.js
uses serialize
, which is the default export from dom-serializer
. Looking at it, you'd just have to change what's currently line 144 来自:
tag += '/>';
到
tag += ' />';
您可以为此添加一个选项并向他们发送拉取请求。 :-)
您说过您的一些标签有 space 而有些没有。我认为在这种情况下,您最好的选择是进行合理化数据的提交(使其始终具有 space 或不具有 space),而不更改任何其他内容。这样,未来的提交就不会出现自关闭标签结尾不一致的问题。如果你这样做,最好坚持使用 cheerio
的默认序列化。
如果你真的想确保解析 XML 然后序列化它生成精确的词法 XML ,实现它的唯一真正方法是始终保持你的词法 XML 规范形式 - 官方 "Canonical XML" 标准(参见 https://www.xml.com/pub/a/ws/2002/09/18/c14n.html),或您自己设计的其他规范表示。不幸的是,您可能会发现 tools/libraries 在 Javascript 世界中这样做并不多,因此您可能必须自己设计。
一种更特别的方法是通过确保在序列化时避免 "quirkiness" 来尝试避免最常见的陷阱。例如,避免在属性周围使用单引号,避免 CDATA 部分——并避免在标记中使用不必要的空格。
我的问题是在 cheerio 解析期间没有在 XML 关闭标记中保留 space。
const xmlstr = <plugin> <testId /> <classId /> <goalsone> <goals /> <info>new</info> </goalsone> </plugin>;
const $one = cheerio.load(xmlstr, { xmlMode: true });
console.log( $one.xml() );
returns
<plugin> <testId/> <classId/> <goalsone> <goals/> <info>new</info> </goalsone> </plugin>
这里的输出来自 <testId/>
和 <classId/>
,但初始状态是 <testId />
,关闭标记末尾有一个 space,与 [= 的情况相同17=]。我想用标签保留自闭标签 space。我不想更改 XML 当前格式。
不幸的是,我认为您必须分叉 cheerio
并更新其 xml
代码。它似乎没有任何选项可以解决这个问题,post-将结果 XML 作为字符串处理会有问题。
看起来像 static.js
uses serialize
, which is the default export from dom-serializer
. Looking at it, you'd just have to change what's currently line 144 来自:
tag += '/>';
到
tag += ' />';
您可以为此添加一个选项并向他们发送拉取请求。 :-)
您说过您的一些标签有 space 而有些没有。我认为在这种情况下,您最好的选择是进行合理化数据的提交(使其始终具有 space 或不具有 space),而不更改任何其他内容。这样,未来的提交就不会出现自关闭标签结尾不一致的问题。如果你这样做,最好坚持使用 cheerio
的默认序列化。
如果你真的想确保解析 XML 然后序列化它生成精确的词法 XML ,实现它的唯一真正方法是始终保持你的词法 XML 规范形式 - 官方 "Canonical XML" 标准(参见 https://www.xml.com/pub/a/ws/2002/09/18/c14n.html),或您自己设计的其他规范表示。不幸的是,您可能会发现 tools/libraries 在 Javascript 世界中这样做并不多,因此您可能必须自己设计。
一种更特别的方法是通过确保在序列化时避免 "quirkiness" 来尝试避免最常见的陷阱。例如,避免在属性周围使用单引号,避免 CDATA 部分——并避免在标记中使用不必要的空格。