2017-05-11 92 views
0

我在使用etree npm for nodejs时遇到了问题。我在我的应用程序中广泛使用elementtree npm,所以我不能改变npm。我正在使用下面的代码编写XML。nodejs elementtree npm etree.write()漂亮的打印

var et = require('elementtree'); 
tailorData = fs.readFileSync(XML_FILE).toString(); 
etree = et.parse(tailorData); 
// Do some changes in xml 
var resultXml = etree.write(); // DOES NOT DO PRETTY PRINTING 
fs.writeFileSync(tailoredXML, resultXml); 

etree.write()搞砸了整个XML,后来我的处理就停止了。它不会在标签之后放置结束符。这就是XML现在的样子。

<?xml version='1.0' encoding='utf-8'?><Tailoring id="1234"><status>incomplete</status><Profile id="CIS_LEVEL_1"><title>CIS_LEVEL_1 Security Profile</title><select idref="file_group_owner_grub2_cfg" selected="true" /><select idref="file_user_owner_grub2_cfg" selected="true" /><select idref="file_permissions_grub2_cfg" selected="true" /></Profile></Tailoring> 

下面是我的期望:

<?xml version='1.0' encoding='utf-8'?> 
<Tailoring id="1234"> 
<status>incomplete</status> 
<Profile id="CIS_LEVEL_1"> 
<title>CIS_LEVEL_1 Security Profile</title> 
<select idref="file_group_owner_grub2_cfg" selected="true" /> 
<select idref="file_user_owner_grub2_cfg" selected="true" /> 
<select idref="file_permissions_grub2_cfg" selected="true" /> 
</Profile> 
</Tailoring> 

是他们的任何方法可以让我acheive上述结果的NodeJS。

回答

0

想通了办法。使用非常轻的npm“漂亮数据”来实现这一点。

var pd = require('pretty-data').pd; 

var et = require('elementtree'); 
tailorData = fs.readFileSync(XML_FILE).toString(); 
etree = et.parse(tailorData); 
// Do some changes in xml 
var resultXml = etree.write(); 
resultXml = pd.xml(resultXml); // THIS WILL DO THE PRETTY PRINTING. 
fs.writeFileSync(tailoredXML, resultXml);