如何在XQuery中从字符串动态生成带元素和值的XML
动态生成列不固定的CSV转XML方案
需求说明
读取列数/表头不固定的文本文件(CSV格式,每条记录以换行分隔),将内容转换为字符串后,动态以表头列为元素生成对应的XML文件。
输入示例
第一组(4列)
ProductId,ProductName,Manufacturer,ProductPrice 100,IPhone,Apple,$799 101,Galaxy S25,Samsung,$899
第二组(5列,新增MFYear)
ProductId,ProductName,Manufacturer,ProductPrice,MFYear 100,IPhone,Apple,$799,2024 101,Galaxy S25,Samsung,$899,2025
输出XML示例
第一组对应XML
<Products> <Product> <ProductId>100</ProductId> <ProductName>IPhone</ProductName> <Manufacturer>Apple</Manufacturer> <ProductPrice>$799</ProductPrice> </Product> <Product> <ProductId>101</ProductId> <ProductName>Galaxy S25</ProductName> <Manufacturer>Samsung</Manufacturer> <ProductPrice>$899</ProductPrice> </Product> </Products>
第二组对应XML
<Products> <Product> <ProductId>100</ProductId> <ProductName>IPhone</ProductName> <Manufacturer>Apple</Manufacturer> <ProductPrice>$799</ProductPrice> <MFYear>2024</MFYear> </Product> <Product> <ProductId>101</ProductId> <ProductName>Galaxy S25</ProductName> <Manufacturer>Samsung</Manufacturer> <ProductPrice>$899</ProductPrice> <MFYear>2025</MFYear> </Product> </Products>
实现代码(Python)
以下代码可动态适配任意列数的CSV文件,核心逻辑是先提取表头,再逐行匹配表头生成XML元素:
def csv_to_dynamic_xml(csv_content): # 按换行拆分内容,过滤空行 lines = [line.strip() for line in csv_content.split('\n') if line.strip()] if not lines: return "" # 提取表头和数据行 headers = [h.strip() for h in lines[0].split(',')] data_rows = [] for line in lines[1:]: data_rows.append([d.strip() for d in line.split(',')]) # 构建XML xml = ['<Products>'] for row in data_rows: xml.append(' <Product>') # 动态匹配表头和数据 for header, value in zip(headers, row): xml.append(f' <{header}>{value}</{header}>') xml.append(' </Product>') xml.append('</Products>') return '\n'.join(xml) # 测试第一组输入 csv_input1 = """ProductId,ProductName,Manufacturer,ProductPrice 100,IPhone,Apple,$799 101,Galaxy S25,Samsung,$899""" print(csv_to_dynamic_xml(csv_input1)) # 测试第二组输入 csv_input2 = """ProductId,ProductName,Manufacturer,ProductPrice,MFYear 100,IPhone,Apple,$799,2024 101,Galaxy S25,Samsung,$899,2025""" print(csv_to_dynamic_xml(csv_input2))
代码说明
- 先将输入的CSV字符串按换行拆分,过滤无效空行
- 提取第一行作为表头,后续行作为数据行
- 循环遍历每条数据,根据表头动态生成对应的XML子元素,完全适配列数变化
- 最终拼接成标准格式的XML字符串
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

