首先需安装flask
pip install flask
示意工具的功能说明:
上传一个文件,若是xml文件则将其显示出来。

工具示意图

成功上传后
具体代码
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提示的密钥
# 主页HTML模板(内嵌在代码中,无需额外文件)
HTML_TEMPLATE = """
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>局域网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>局域网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文件名称:</h3>
<div class="xml-fileName">{{ xml_fileName }}</div>
{% endif %}
{% if xml_content %}
<h3 class="success">XML文件内容:</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("请选择要上传的文件", "error")
return render_template_string(HTML_TEMPLATE, xml_content=xml_content)
# 验证文件后缀(前端已限制,后端二次校验)
if not file.filename.endswith(".xml"):
flash("上传的文件不合规,请重传标准XML文件(后缀为.xml)", "error")
return render_template_string(HTML_TEMPLATE, xml_fileName=xml_fileName, xml_content=xml_content)
try:
# 读取文件内容并解析XML
file_content = file.read().decode("utf-8") # 假设文件编码为UTF-8
# 验证XML格式是否标准
ET.parse(StringIO(file_content))
# 展示文件名称
xml_fileName = file.filename
# 格式化展示内容(保留原始缩进)
xml_content = file_content
except UnicodeDecodeError:
flash("文件编码错误,仅支持UTF-8编码的XML文件", "error")
except ET.ParseError:
flash("上传的文件不合规,不是标准XML格式,请重传", "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 表示允许局域网所有设备访问,port=5000(可修改为其他未占用端口)
app.run(host="0.0.0.0", port=5000, debug=False)