使用python从csv数据生成新的xml

2024-09-27 17:42:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想生成下面的xml。有线索吗?你知道吗

CSV data   
id,value,
1,10
2,20

<root>  
    <xs:sample name="id">
            <xs:final>
                <xs:id>1</xs:id>
            </xs:final>
            <xs:new base="xs:string">
                <xs:maxLength value="10"/>
            </xs:new>
    </xs:sample>    
    <xs:sample name="id">
            <xs:final>
                <xs:id>2</xs:id>
            </xs:final>
            <xs:new base="xs:string">
                <xs:maxLength value="20"/>
            </xs:new>
    </xs:sample>    
</root>

我用过lxml.etree文件,但输出xml结构有所不同。你知道吗

我不想硬编码的值,因为我想在csv循环

示例代码,我使用过:

import csv
import lxml.etree as ET
headers = ['id','value']
root = ET.Element("root")
xssample = ET.SubElement(root, "xssample")
xsfinal = ET.SubElement(xssample, "xsfinal")
xsnew = ET.SubElement(xssample, "xsnew")
xsid = ET.SubElement(xsfinal, "xsid")
xsmaxlength = ET.SubElement(xsnew, "xsmaxlength")

filename = 'sample.csv'

with open(filename) as f:
    next(f)                             # SKIP HEADER
    csvreader = csv.reader(f)

    for row in csvreader:        
        for x in range(len(headers)): 
            data = ET.SubElement(root, "xssample", {'name':headers[x]})
            for col in range(len(headers)):
                node = ET.SubElement(data, headers[col]).text = str(row[col])

# SAVE XML TO FILE
tree_out = (ET.tostring(root, pretty_print=True, xml_declaration=True, encoding="UTF-8"))

# OUTPUTTING XML CONTENT TO FILE
with open('Output.xml', 'wb') as f:
    f.write(tree_out)

产出结构不同:

 <?xml version='1.0' encoding='UTF-8'?>
    <root>
      <xssample>
        <xsfinal>
          <xsid/>
        </xsfinal>
        <xsnew>
          <xsmaxlength/>
        </xsnew>
      </xssample>
      <xssample name="id">
        <id>1</id>
        <value>10</value>
      </xssample>
      <xssample name="value">
        <id>1</id>
        <value>10</value>
      </xssample>
      <xssample name="id">
        <id>2</id>
        <value>20</value>
      </xssample>
      <xssample name="value">
        <id>2</id>
        <value>20</value>
      </xssample>
    </root>

我无法正确更改标签。有人能指出这个问题吗。你知道吗


Tags: samplenameidnewvaluerootxmlet
1条回答
网友
1楼 · 发布于 2024-09-27 17:42:30

您可以手动生成XML:

import pandas as pd

result = ''
df = pd.read_csv('file.csv')
for index, row in df.iterrows():
   result += '''<xs:sample name="id"><xs:final><xs:id>{}</xs:id></xs:final><xs:new base="xs:string"><xs:maxLength value="{}"/></xs:new></xs:sample>'''.format(int(row['id']), int(row['value']))
root = '<root>{}</root>'.format(result)

输出:

<root><xs:sample name="id"><xs:final><xs:id>1</xs:id></xs:final><xs:new base="xs:string"><xs:maxLength value="10"/></xs:new></xs:sample><xs:sample name="id"><xs:final><xs:id>2</xs:id></xs:final><xs:new base="xs:string"><xs:maxLength value="20"/></xs:new></xs:sample></root>

相关问题 更多 >

    热门问题