首先需安裝flask
pip install flask
示意工具的功能說(shuō)明:
上傳一個(gè)文件,若是xml文件則將其顯示出來(lái)。

工具示意圖

成功上傳后
具體代碼
from flask import Flask, render_template_string, request, flash
import xml.etree.ElementTree as ET
from io import StringIO
app = Flask(__name__)
app.secret_key = "company_internal_tool_2024" # 用于flash提示的密鑰
# 主頁(yè)HTML模板(內(nèi)嵌在代碼中,無(wú)需額外文件)
HTML_TEMPLATE = """
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>局域網(wǎng)XML文件查看器</title>
<style>
body { max-width: 1200px; margin: 0 auto; padding: 20px; font-family: Arial, sans-serif; }
.upload-form { margin-bottom: 30px; padding: 20px; border: 1px solid #eee; border-radius: 8px; }
input[type="file"] { margin: 10px 0; padding: 8px; }
button { padding: 10px 20px; background: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer; }
button:hover { background: #0056b3; }
.xml-fileName { padding: 20px; border: 1px solid #eee; border-radius: 8px; white-space: pre-wrap; word-break: break-all; }
.xml-content { padding: 20px; border: 1px solid #eee; border-radius: 8px; white-space: pre-wrap; word-break: break-all; }
.error { color: #dc3545; font-weight: bold; }
.success { color: #28a745; }
</style>
</head>
<body>
<h1>局域網(wǎng)XML文件查看器</h1>
<div class="upload-form">
<form method="POST" enctype="multipart/form-data">
<label for="xml-file">選擇XML文件:</label>
<input type="file" id="xml-file" name="xml_file" accept=".xml" required>
<br>
<button type="submit">上傳并解析</button>
</form>
</div>
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, msg in messages %}
<div class="{{ category }}">{{ msg }}</div>
{% endfor %}
{% endif %}
{% endwith %}
{% if xml_fileName %}
<h3 class="success">XML文件名稱(chēng):</h3>
<div class="xml-fileName">{{ xml_fileName }}</div>
{% endif %}
{% if xml_content %}
<h3 class="success">XML文件內(nèi)容:</h3>
<div class="xml-content">{{ xml_content }}</div>
{% endif %}
</body>
</html>
"""
@app.route("/", methods=["GET", "POST"])
def index():
xml_fileName = None
xml_content = None
if request.method == "POST":
# 獲取上傳的文件
file = request.files.get("xml_file")
if not file or file.filename == "":
flash("請(qǐng)選擇要上傳的文件", "error")
return render_template_string(HTML_TEMPLATE, xml_content=xml_content)
# 驗(yàn)證文件后綴(前端已限制,后端二次校驗(yàn))
if not file.filename.endswith(".xml"):
flash("上傳的文件不合規(guī),請(qǐng)重傳標(biāo)準(zhǔn)XML文件(后綴為.xml)", "error")
return render_template_string(HTML_TEMPLATE, xml_fileName=xml_fileName, xml_content=xml_content)
try:
# 讀取文件內(nèi)容并解析XML
file_content = file.read().decode("utf-8") # 假設(shè)文件編碼為UTF-8
# 驗(yàn)證XML格式是否標(biāo)準(zhǔn)
ET.parse(StringIO(file_content))
# 展示文件名稱(chēng)
xml_fileName = file.filename
# 格式化展示內(nèi)容(保留原始縮進(jìn))
xml_content = file_content
except UnicodeDecodeError:
flash("文件編碼錯(cuò)誤,僅支持UTF-8編碼的XML文件", "error")
except ET.ParseError:
flash("上傳的文件不合規(guī),不是標(biāo)準(zhǔn)XML格式,請(qǐng)重傳", "error")
except Exception as e:
flash(f"文件處理失?。簕str(e)}", "error")
return render_template_string(HTML_TEMPLATE, xml_fileName=xml_fileName, xml_content=xml_content)
if __name__ == "__main__":
# 0.0.0.0 表示允許局域網(wǎng)所有設(shè)備訪問(wèn),port=5000(可修改為其他未占用端口)
app.run(host="0.0.0.0", port=5000, debug=False)