如何使用 xml2js 从对象数组中获取 XML?
How to get XML from array of objects with xml2js?
我想使用 xml2js 从对象数组构建 XML 文件。有办法吗?
这不起作用,因为 xml2js.Builder() 需要一个对象。
export const buildXML = (data: any[]) => {
const builder = new xml2js.Builder();
return builder.buildObject(data)
}
returns 个 XML 数组,但我需要一个:
export const buildXML = (data: any[]) => {
const builder = new xml2js.Builder();
return data.map(obj => builder.buildObject(obj))
}
结果XML应该在这个函数中使用
export const downloadFile = (data: any[], fileName = 'generator_result', fileFormat: any) => {
let parsedData: any
const FILE_TYPE = fileFormat === 'xml' ? XML_TYPE : EXCEL_TYPE;
if (fileFormat === 'xml') {
parsedData = buildXML(data);
} else {
parsedData = downloadAsExcel(data, fileFormat)
}
const fileData = new Blob([parsedData], {type: FILE_TYPE});
saveAs(fileData, fileName + '.' + fileFormat);
}
更新
如果我这样做那么什么都不会发生...我的意思是没有 console.log(x)...这意味着 const x = builder.buildObject(data)
行有问题不是吗?
export const buildXML = (data: any[]) => {
const builder = new xml2js.Builder();
const x = builder.buildObject(data)
console.log('x:', x)
return x
}
您可以将数组传递给构建器:
const data = [{ item: '1' }, { item: '2' }, { item: '3' }];
const buildXML = (data) => {
const builder = new xml2js.Builder();
return builder.buildObject(data);
};
const doc = buildXML(data);
因为 XML 必须有一个根元素,xml2js 会为您添加它并产生这个结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<item>1</item>
<item>2</item>
<item>3</item>
</root>
如果您想对根元素有更多的控制,只需将您的数组包裹在一个父对象中,并使用单个 属性(属性 的名称将成为根元素):
const data = {data: [{ item: '1' }, { item: '2' }, { item: '3' }]};
const buildXML = (data) => {
const builder = new xml2js.Builder();
return builder.buildObject(data);
};
const doc = buildXML(data);
结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
<item>1</item>
<item>2</item>
<item>3</item>
</data>
我想使用 xml2js 从对象数组构建 XML 文件。有办法吗?
这不起作用,因为 xml2js.Builder() 需要一个对象。
export const buildXML = (data: any[]) => {
const builder = new xml2js.Builder();
return builder.buildObject(data)
}
returns 个 XML 数组,但我需要一个:
export const buildXML = (data: any[]) => {
const builder = new xml2js.Builder();
return data.map(obj => builder.buildObject(obj))
}
结果XML应该在这个函数中使用
export const downloadFile = (data: any[], fileName = 'generator_result', fileFormat: any) => {
let parsedData: any
const FILE_TYPE = fileFormat === 'xml' ? XML_TYPE : EXCEL_TYPE;
if (fileFormat === 'xml') {
parsedData = buildXML(data);
} else {
parsedData = downloadAsExcel(data, fileFormat)
}
const fileData = new Blob([parsedData], {type: FILE_TYPE});
saveAs(fileData, fileName + '.' + fileFormat);
}
更新
如果我这样做那么什么都不会发生...我的意思是没有 console.log(x)...这意味着 const x = builder.buildObject(data)
行有问题不是吗?
export const buildXML = (data: any[]) => {
const builder = new xml2js.Builder();
const x = builder.buildObject(data)
console.log('x:', x)
return x
}
您可以将数组传递给构建器:
const data = [{ item: '1' }, { item: '2' }, { item: '3' }];
const buildXML = (data) => {
const builder = new xml2js.Builder();
return builder.buildObject(data);
};
const doc = buildXML(data);
因为 XML 必须有一个根元素,xml2js 会为您添加它并产生这个结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<item>1</item>
<item>2</item>
<item>3</item>
</root>
如果您想对根元素有更多的控制,只需将您的数组包裹在一个父对象中,并使用单个 属性(属性 的名称将成为根元素):
const data = {data: [{ item: '1' }, { item: '2' }, { item: '3' }]};
const buildXML = (data) => {
const builder = new xml2js.Builder();
return builder.buildObject(data);
};
const doc = buildXML(data);
结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
<item>1</item>
<item>2</item>
<item>3</item>
</data>