一種方法是使用xmldom和xpath。首先,使用xpath和XPath表達式來獲取要刪除的節點。它返回一個可以從DOM樹中移除的xmldom節點數組。例如,要刪除所有book
節點:
var xmldom = require('xmldom');
var xpath = require('xpath');
var parser = new xmldom.DOMParser();
var serializer = new xmldom.XMLSerializer();
var xmlIn = '<bookstore>' +
'<book>Animal Farm</book>' +
'<book>Nineteen Eighty-Four</book>' +
'<essay>Reflections on Writing</essay>' +
'</bookstore>';
var root = parser.parseFromString(xmlIn, 'text/xml');
var nodes = xpath.select('//book', root);
nodes.forEach(function (n) {
n.parentNode.removeChild(n);
});
var xmlOut = serializer.serializeToString(root);
然而,處理命名空間,多XPath表達式和縮進保存是一個鬥爭。因此我創建了一個NPM模塊filterxml來提升重量。
var filterxml = require('filterxml')
var patterns = ['//book'];
var namespaces = {};
filterxml(xmlIn, patterns, namespaces, function (err, xmlOut) {
console.log(xmlOut);
});
將輸出:
<bookstore><essay>Reflections on Writing</essay></bookstore>
上搜索NPM任何XML解析器包,包括它,看了你的文件,刪除某些節點,保存到文件就萬事大吉了。你到底在問什麼? – xDreamCoding
@xDreamCoding謝謝,我一直在尋找一個通用的方法,你簡要描述了一下,並且有一個代碼片斷。尤其是節點應該如何移除的部分。我編輯了更具體的問題。我發現[xpath](https://www.npmjs.com/package/xpath)可能能夠做到這一點。如果它運行良好,我想我會爲此實現一個npm模塊。 –
您想要轉換XML文件。 XSLT是你的朋友。 – Tomalak