如何处理xml文件并将其保存到磁盘?

时间:2019-06-20 13:18:57

标签: node.js xmldom

我有两个具有完全相同结构的xml文件。唯一的区别是标签的内部文本。 我想用第二个文件中的相应值替换第一个文件中的值。

我尝试使用xml2json,但是问题是它删除了我在最终输出中需要的所有注释。 所以目前我正在使用xmldom。 我可以操纵文本,但是当我尝试将文件保存到磁盘时所做的更改会丢失。

var DOMParser = require("xmldom").DOMParser;
var serializer = new (require('xmldom')).XMLSerializer;
var fs = require('fs');

let firstXML = `<root>
    <!--This is just a comment-->
    <string name="one">SOMETHING</string>
</root>`

let secondXML = `<root>
    <string name="one">ELSE</string>
</root>`

var firstDoc = new DOMParser().parseFromString(firstXML, "text/xml");
var secondDoc = new DOMParser().parseFromString(secondXML, "text/xml");

let elementsFirst = firstDoc.getElementsByTagName("string");
let elementsSecond = secondDoc.getElementsByTagName("string");

for(let i = 0; i < elementsFirst.length; ++i) {
    let el = elementsFirst[i];
    let name = el.getAttribute("name");
    for(let j = 0; j < elementsSecond.length; ++j) {

        if(name = elementsSecond[j].getAttribute("name")) {
            el.firstChild.nodeValue = elementsSecond[j].firstChild.nodeValue;
            break;
        }
    }
}

fs.writeFileSync("output.xml", serializer.serializeToString(firstDocs));

//Required output

`<root>
    <!--This is just a comment-->
    <string name="one">ELSE</string>
</root>`

1 个答案:

答案 0 :(得分:0)

请不要问我为什么,但是如果您替换此行

el.firstChild.nodeValue = elementsSecond[j].firstChild.nodeValue;

与此一起

el.firstChild.data = elementsSecond[j].firstChild.nodeValue;

它将按预期工作。

P.S。您的if语句中有错字,您需要===,单个=通常会返回true

更新:找到解决方案后-我发现它与this one重复