fast-xml-parserをインストール
npm install fast-xml-parser
fast-xml-parser
ValidateXML,ParseXML,BuildXMLwithoutC/C++basedlibraries.Latestversion:4.5.0,lastpublished:3monthsago.Startusingfast-xml-parserinyourprojectbyrunning`npmifast-xm...
XMLをパースして、attributeを参照して、最後にXMLに差し戻して保存する感じの処理です。
const { XMLParser, XMLBuilder, XMLValidator } = require('fast-xml-parser');
const options = {
ignoreAttributes: false,
format: true,
};
const parser = new XMLParser(options);
const xmlSample = `
<?xml version="1.0" encoding="utf-8"?>
<root>
<item id="fuga">aaa</item>
<item id="piyo">bbb</item>
</root>`;
const filePath = path.join(__dirname, 'hoge.xml');
const xmlStr = fs.readFileSync(filePath, 'utf-8').toString();
const xmlObj = parser.parse(xmlStr);
for (let i = 0; i < xmlObj.root.item.length; i++) {
const item = xmlObj.root.item[i];
const idKey = '@_id';
const textKey = '#text';
const id = item[idKey];
console.log(id);
// => fuga
const text = item[textKey];
console.log(text);
// => aaa
}
const xmlContent = builder.build(xmlObj);
fs.writeFileSync(path + 'piyo.xml', xmlContent, function (err) {
if (err) return log.error(err);
});
ignoreAttributesは未設定の場合はtrueとなるため、オプション未指定の場合はattributeがパースされません。
また、出力時にのみ影響しますがformat: trueとしておけばelement毎に改行されて表示されます。こちらはデフォルトでfalseなので1行で出力されます。
const options = {
ignoreAttributes: false,
format: true,
};
const idKey = '@_id';
const textKey = '#text';
まあfast-xml-parserはattributeの指定にはprefixとして”@_”が必要です。
またelementの値は”#text”で取得できます。
オブジェクトにattributeを足す場合も
item[“@_hoge”] のようにprefix付きで値を足すとbuildすればattributeとして出力できます。
コメント