我可以像这样从解析的 XML 中提取元素:
import { XMLParser } from "fast-xml-parser";
let xml = '<gpx myAttr="fred"><trk>track 1</trk><trk>track 2<trkpt>trackpoint 2</trkpt></trk></gpx>';
const options = {
ignoreAttributes: false,
attributeNamePrefix : "@_"
};
const parser = new XMLParser(options);
const root = parser.parse(xml);
const track0 = root.gpx.trk[0]; // gives 'track 1'
const trackpoint = root.gpx.trk[1].trkpt; // gives 'trackpoint 2'
const attr = root.gpx.myAttr; // gives 'undefined'
但是尝试获取该属性不起作用。由于解析器的
attributeNamePrefix
我也尝试过
const attr = root.gpx.@_myAttr;
但是这当然会产生语法错误。提取属性后,我想修改它并使用
XMLBuilder
重新创建 XML,因此我需要类似 的内容
root.gpx.myAttr = "newAttr";
这里有一个JSFiddle。
您放入 JSFiddle 的代码似乎大部分是正确的。但是,XML 字符串中存在语法错误;缺少
<trk>
的结束标签。这是更正后的代码:
更正 JSFiddle:
// let xml = '<gpx myAttr="fred"><trk>track 1</trk><trk>track 2<trkpt>trackpoint 2</trkpt></trk></gpx>';
let xml =
'<gpx myAttr="fred"><trk>track 1</trk><trk>track 2</trk><trkpt>trackpoint 2</trkpt></trk></gpx>';
const options = {
ignoreAttributes: false,
attributeNamePrefix: '@_', // you have assign this so use this to access the attribute
};
const parser = new XMLParser(options);
const root = parser.parse(xml);
const track0 = root.gpx.trk[0];
const trackpoint = root.gpx.trk[1].trkpt;
// const attr = root.gpx.myAttr
const attr = root.gpx['@_myAttr']; // Use the correct attribute name
document.getElementById('trk1').innerHTML = track0;
document.getElementById('trk2').innerHTML = trackpoint;
document.getElementById('attr').innerHTML = attr;
所做的更改:
root.gpx['@_myAttr']
而不是 root.gpx.myAttr
来访问具有正确名称的属性。