2017-08-01 89 views
0

我想直接使用node.js將xml文件轉換爲csv文件。在node.js中將XML解析爲CSV

我的XML文件看起來像:

<?xml version="1.0" encoding="UTF-8"?> 
<testResults version="1.2"> 
<httpSample ts="1501597136964" lb="req_10"> 
    <responseData class="java.lang.String">1501597138973</responseData> 
</httpSample> 
<httpSample ts="1501597136964" lb="req_10"> 
    <responseData class="java.lang.String">1501597139525</responseData> 
</httpSample> 
<httpSample ts="1501597136964" lb="req_10"> 
    <responseData class="java.lang.String">1501597139716</responseData> 
</httpSample> 
</testResults> 

我能夠得到的<responseData class="java.lang.String">1501597138973</responseData>值。 但我也想從<httpSample>標籤

解析的ts="1501597136964"lb="req_10"值我使用xml2rec

var xml2rec=require('xml2rec'); 
xml2rec('xmlFile.xml', 'httpSample', 'csvFile.csv'); 

我應該檢查任何其他程序包,可以幫助我做到這一點還是我得走了將xml轉換成json然後json轉換爲csv ?? 此外,這樣做,我將能夠得到tslb屬性的值httpSample標籤?

附:輸出xml文件是JMeter響應文件

回答

1

不知道這樣做的最好方法是什麼,但由於xml結構並不平坦,您必須在轉換爲csv之前將其平坦化。

const transform = require('camaro') 
const json2csv = require('json2csv') 

const xml = ` 
<?xml version="1.0" encoding="UTF-8"?> 
<testResults version="1.2"> 
<httpSample ts="1501597136964" lb="req_10"> 
    <responseData class="java.lang.String">1501597138973</responseData> 
</httpSample> 
<httpSample ts="1501597136964" lb="req_10"> 
    <responseData class="java.lang.String">1501597139525</responseData> 
</httpSample> 
<httpSample ts="1501597136964" lb="req_10"> 
    <responseData class="java.lang.String">1501597139716</responseData> 
</httpSample> 
</testResults> 
` 
const template = { 
    data: ['//httpSample', { 
     ts: '@ts', 
     lb: '@lb', 
     resp: 'responseData' 
    }] 
} 

const result = transform(xml, template) 
const csv = json2csv({ data: result.data}) 
console.log(csv) 

輸出:

"lb","resp","ts" 
"req_10","1501597138973","1501597136964" 
"req_10","1501597139525","1501597136964" 
"req_10","1501597139716","1501597136964" 
+0

所以我們通常從** XML到JSON去**,然後** JSON到CSV ** ......讓我來試試,如果這是在我的案件有幫助。 –