基于eSDScom XSD Schema使用Python创建XML文件的入门示例求助
入门级Python生成合法eSDScom XML示例
1. 核心思路
我们用Python内置的xml.etree.ElementTree库构建XML结构,严格贴合eSDScom XSD的节点定义和命名空间要求,同时添加基础测试数据,最后生成格式化的XML文件。
2. 完整代码示例
import xml.etree.ElementTree as ET from xml.dom import minidom def generate_esdscom_xml(): # 定义eSDScom命名空间 ns_uri = "http://www.esdscom.org/schema/sdscom" # 创建根节点,指定版本属性 root = ET.Element(f"{{{ns_uri}}}SDSCom", attrib={"version": "1.0"}) # 添加基础信息模块(必填节点) basic_info = ET.SubElement(root, f"{{{ns_uri}}}BasicInformation") ET.SubElement(basic_info, f"{{{ns_uri}}}DocumentID").text = "TEST-SDS-0001" ET.SubElement(basic_info, f"{{{ns_uri}}}DocumentName").text = "测试化学品安全数据单" ET.SubElement(basic_info, f"{{{ns_uri}}}LanguageCode").text = "zh-CN" ET.SubElement(basic_info, f"{{{ns_uri}}}CreationDate").text = "2024-05-20" # 添加产品信息模块(必填节点) product_info = ET.SubElement(root, f"{{{ns_uri}}}ProductInformation") product = ET.SubElement(product_info, f"{{{ns_uri}}}Product") ET.SubElement(product, f"{{{ns_uri}}}ProductName").text = "工业测试溶剂X" ET.SubElement(product, f"{{{ns_uri}}}CASNumber").text = "123-45-6" # 美化XML格式,提升可读性 rough_xml = ET.tostring(root, 'utf-8') parsed_xml = minidom.parseString(rough_xml) pretty_xml = parsed_xml.toprettyxml(indent=" ", encoding='utf-8') # 保存到本地文件 with open("test_esdscom.xml", "wb") as file: file.write(pretty_xml) if __name__ == "__main__": generate_esdscom_xml() print("测试用eSDScom XML文件已生成:test_esdscom.xml")
3. 合法性验证(可选进阶)
如果要确保生成的XML完全符合XSD规范,可以使用lxml库做校验:
- 先安装依赖:
pip install lxml
- 添加校验代码:
from lxml import etree def validate_esdscom_xml(xml_file_path, xsd_file_path): # 加载XSD Schema文件 xsd_schema = etree.XMLSchema(etree.parse(xsd_file_path)) # 加载生成的XML文件 xml_doc = etree.parse(xml_file_path) if xsd_schema.validate(xml_doc): print("XML完全符合eSDScom XSD规范") else: print("XML不符合规范,错误详情:") for error in xsd_schema.error_log: print(f"行{error.line}:{error.message}") # 调用校验(需提前将eSDScom的sdscom.xsd文件下载到本地) validate_esdscom_xml("test_esdscom.xml", "sdscom.xsd")
关键注意事项
- 必须严格遵循XSD定义的节点层级和命名空间,代码中使用的命名空间URI是eSDScom官方规定的,不能修改
- 节点文本要符合XSD的数据类型要求,比如日期必须是
YYYY-MM-DD格式,编码要统一用UTF-8 - 入门阶段可以先只实现XSD中的必填节点,再逐步扩展可选内容
内容的提问来源于stack exchange,提问作者FloHab
相关产品推荐
相关产品推荐

