我希望从文件系统中过滤和格式化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是我公司的产品]