xml - 使用 JS/VueJS 将 XML 文件转换为字符串(将其发送到后端服务器)
问题描述
我需要将上传的 .xml 文件转换为字符串并将其发送到后端服务器。换句话说,我需要保留原始的“外观”-例如:<process.end.date>20100131</process.end.date>
因此标签必须保留并像那样发送。如何转换文件?
上传XML.vue
<template>
<fieldset class="buttons">
<span class="logInBTN" v-on:click="send(xml)">Send</span>
</fieldset>
<br>
<div class="mainContainer">
<table border="0px">
<tr>
<td>
<label>Upload file: </label>
<input id="fileInput" type="file" @change="handleUpload" accept=".xml"/>
</td>
</tr>
</table>
</div>
</div>
</template>
<script>
import config from '../main.js'
export default {
data(){
return {
xml: ''
}
},
methods:{
send(xml){
console.log("Result1:\n\n" + this.xml);
const url = this.$session.get('apiUrl') + 'manualReceive'
this.submit('post',url, xml);
},
submit(requestType, url, submitData) {
this.$http[requestType](url, submitData)
.then(response => {
console.log("manualReceive " + response.data);
if(response.data == true)
alert('Successful Sent!');
else
alert('Problem with sending message!');
})
.catch(error => {
console.log('error:' + error);
});
},
handleUpload: function(){
var fileInput = document.getElementById('fileInput');
var file = fileInput.files[0];
var reader = new FileReader();
reader.addEventListener('load', function(){
this.xml = reader.result;
console.log("Result:\n\n" + this.xml);
});
this.xml = reader.readAsText(file);
}
}
}
</script>
更新:
我意识到 xml 是字符串格式的。现在我知道问题出在哪里了——当我console.log("Result1:\n\n" + this.xml);
在 send(xml) 函数中写入时,它是未定义的。虽然console.log("Result:\n\n" + this.xml);
工作正常我该如何解决这个问题?
更新2:
<script>
import config from '../main.js'
export default {
data(){
return {
xml: ''
}
},
methods:{
send(){
/*console.log("Result2:\n\n" + this.xml);*/
const url = this.$session.get('apiUrl') + 'manualReceive'
this.submit('post',
url,
this.xml
);
},
submit(requestType, url, submitData) {
this.$http[requestType](url, submitData)
.then(response => {
console.log("manualReceive " + response.data);
if(response.data == true)
alert('Успешно изпратено съобщение към CDCO!');
else
alert('Проблем при изпращането на съобщението!');
})
.catch(error => {
console.log('error:' + error);
});
},
handleUpload: function(){
var fileInput = document.getElementById('fileInput');
var file = fileInput.files[0];
var reader = new FileReader();
var self = this;
reader.addEventListener('load', function(){
self.xml = reader.result;
/*console.log("Result1:\n\n" + self.xml);*/
});
reader.readAsText(file);
}
}
}
</script>
解决方案
您不需要传递xml
给send
函数,因为您的xml
字符串是 Vue 实例的属性。将功能更改send
为:
send(){
const url = this.$session.get('apiUrl') + 'manualReceive'
this.submit('post',url, this.xml);
}
在模板中:
<span class="logInBTN" v-on:click="send">Send</span>
更新
此外,您不需要this.xml
在此行中分配:
this.xml = reader.readAsText(file);
只需使用:
reader.readAsText(file);
更新 2
function
您在“加载”事件的函数声明中使用单词,因此this
变量是 FileReader。您应该存储正确this
或使用箭头函数:
var self = this;
reader.addEventListener('load', function(){
self.xml = reader.result;
console.log("Result:\n\n" + self.xml);
});
然后this.xml
将在发送功能中工作。
推荐阅读
- javascript - 有没有办法用 React native 录制音频并将其存储为波形文件?
- python - 如何在 AWS Glue 中正确重命名动态数据框的列?
- java - 在java中组合比较器
- c++ - 谜团:将 GNU C 标签指针转换为函数指针,并使用内联 asm 在该块中放置一个 ret。块被优化掉了?
- java - JASPER REPORT:子报表噩梦,数据源是List
- php - PHP 关联数组到 JSON
- spring - WebMvcTest 太贪心了
- python - 如何使用 matplotlib 以紧凑的布局、透明度和高质量保存动画?
- spring-boot - 如何模拟导致非法参数异常的 JDBC 数据源对象说需要属性“数据源”?
- matrix - 变换场景坐标而不是相机坐标时的渲染损坏