如何在node.js

时间:2018-02-04 21:07:40

标签: node.js xml-builder

我正在使用xmlbuilder npm包 - 它看起来很强大,除了我想将现有的xml文件导入xmlbuilder并操纵元素/属性等,而不是从头开始构建整个事物。可以使用此软件包,或者可能是解决方法吗?

var builder = require('xmlbuilder');
fs.readFile('my-file.txt', 'utf8', function(err, data) {  
if (err) throw err;
    //Load data into xmlbuilder?
    //
});

1 个答案:

答案 0 :(得分:0)

这可以通过使用库的importDocument函数来实现,并且根据您的需要,也可以使用其他库。关键是要识别xmlbuilder-js和其他库中的限制,然后相应地制定策略。例如,在调用xmlbuild-js.create()之后,您无法遍历来自root的文档以获取现有的子元素,您只能追加到最后。了解这一点,您可以规划如何在JSON中创建结构,或者将xml从文件导入JSON,操作它,然后在JSON准备好时使用xmlbuilder-js.create()。或者您可以根据需要使用importDocument插入片段。另一个策略是重新设计你的xml文档,使它们是片段,或者只是从它们中获取片段,你可以在xml构建器中构建根。

以下是从xmlbuilder-js documentation

附加文档的示例
var peopleNode = xmlbuilder.create('roster').ele('people');

for (var i = 1; i <= 3; i++) {   // Create an XML fragment   person =
  xmlbuilder.create('person').att('id', i);   // Import the root node of
  the fragment after   // the people node of the main XML document  
  peopleNode.importDocument(person); 
}

例如,您可以使用xml2js-parser导入带有xml片段的文件,而不是使用xmlbuilder-js创建人员,如本例中的their docs所示:

const fs = require('fs');
const Parser = require('xml2js-parser');

var parser = new Parser({trim: true});
fs.readFile(__dirname + '/foo.xml', (err, xml) => {
    parser.parseString(xml, (err, result) => {
    console.dir(result);
  });
});

这就是我采取的方法,我碰巧在尝试做同样的事情时看到了你的问题。