在node.js中过滤和格式化XML



我希望从文件系统中过滤和格式化XML文件,并将结果发送回请求它的客户端。

XML是这样的:

<root>
<menu>
<date>12.21.2000</date>
<dishes>
<dish>fries with ketchup</dish>
<dish>salad</dish>
</dishes>
</menu>
<menu>
<date>12.21.2000</date>
<dishes>
<dish>fries with ketchup</dish>
<dish>salad</dish>
</dishes>
</menu>
...
</root>

我想在过滤了一定数量的菜肴和日期后返回它们。

<menu>
<date>12.21.2000</date>
<numberofdishes>2</numberofdishes>
</menu>

在我的方法中,我首先将它们转换为JSON,并在其上做了所有的逻辑,然后使用xml2js(一个npm包)转换回来,但这感觉非常低效,而且非常错误。

在节点上处理xml的推荐方法是什么?

您可以通过一个简单的XSLT转换来实现:

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
expand-text="yes">
<xsl:mode on-no-match="shallow-skip"/>
<xsl:template match="menu">
<menu>
<xsl:copy-of select="date"/>
<numberOfDishes>{count(dishes/dish)}</numberOfDishes>
</menu>
</xsl:template>
</xsl:stylesheet>

XSLT 3.0在node.js中可以通过Saxon-JS库获得,该库可以从npm下载。(此转换非常简单,实际上不需要任何XSLT 3.0特性,但既然有,您不妨使用它。)

我不太确定你想要应用的确切转换规则(例如,为什么在输入中有两个菜单,但在输出中只有一个),但这应该不是问题。

[免责声明:Saxon-JS是我公司的产品]

最新更新