替换node.js

时间:2015-06-01 10:55:02

标签: javascript xml node.js

我在Node.js(v0.12.0)中替换XML节点内的文本时遇到了一些麻烦。 “nodeValue”属性似乎让我从节点读取文本,但不会更改它。

我正在使用节点模块“xpath.js”(1.0.6)和“xmldom”(0.1.19)

我的代码:

// Use xpath.js and xmldom to fetch the "metadata" node
var doc = new Parser().parseFromString(jobXml, 'application/xml');
var nodes = select(doc, '/job/metadata/metafield[@name="metadata"]');
var metaNode = nodes[0];

console.log(metaNode.firstChild.nodeValue); // Output is "hello"
metaNode.firstChild.nodeValue = 'world'; // Replace "hello" with "world"
console.log(metaNode.firstChild.nodeValue); // Output is now "world"

var result = new Serializer().serializeToString(doc);
console.log(result); // text has reverted to "hello"

我已经整理了一个runnable.com项目,证明了这种行为:

http://runnable.com/VWw18wFQKv46Ng_V/sean-s-sandbox-for-node-js-and-hello-world

有人能发现我做错了吗?还有另一种方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:1)

我找到了解决这个问题的解决方法:

function setNodeValue(doc, node, newValue) {
    while (node.firstChild) {
        node.removeChild(node.firstChild);
    }
    var newText = doc.createTextNode(newValue);
    node.appendChild(newText);
}

XMLDOM中的错误似乎与上游项目中的Web浏览器兼容性相关联(请参阅#116#33)。