Node.js将XML修改为变量以进行写入

时间:2013-07-08 00:06:35

标签: xml node.js

我一直在搜索,我已经得到了一些很好的答案,但是我的任务的最后一个小细节,我一直无法找到解决方案。

我有一个包含以下功能的Node.js实现。此功能的目的是更改服务器上的xml文件的某些设置。到目前为止,我认为我已经完成了所有工作,但我无法弄清楚如何将已处理的xml字符串写回文件。

$data是来自POST的JSON对象。

function SaveSettings() {
    fs.readFile('config.xml', function (err, data) { //Read the XML file to a string
        if(err) {throw err;}    //If and error, throw error
        var $xml = $(data.toString()).find('settings').each(function () { //Process XML
            $(this).find('background > color').text($data.backgroundColor);
            $(this).find('background > image').text($data.backgroundImage);
            if($data.startupEnabled === "on") {
                $(this).find('startup > enabled').text("true");
            } else {
                $(this).find('startup > enabled').text("false");
            }
            if($data.splashEnabled === "on") {
                $(this).find('startup > splash > enabled').text("true");
            } else {
                $(this).find('startup > splash > enabled').text("false");
            }
            $(this).find('startup > splash > image').text($data.splashImage);
            $(this).find('security > password').text($data.password);
       });

       console.log($xml.toString()); //Contains the output of the jQuery object (Not XML)

        fs.writeFile('config.xml', data.toString(), function (err) {
            if(err) {throw err;}
        }); //data.toString() contains the original XML, unmodified.
    });

    ...
}

我知道这可以用其他语言完成,但我真的很喜欢Node.js解决方案。我也在实现中加载了jstoxml模块和jquery模块。

1 个答案:

答案 0 :(得分:1)

您可能希望将$data传递给函数,而不是依赖它是全局函数。也就是说,您可以通过执行以下操作来获取XML代码:

var div = $("<div></div>");
div.append($(this));
var newXMLcode = div.html();

另请注意,您在整个地方使用$(this) - 您可能希望将其缓存,例如var $this = $(this),然后使用$this代替所有jQuery包装的要求