使用 python 脚本生成 xml 文件时出现缩进错误
Indentation error when generating xml file using python script
我试图通过读取 excel sheet 使用 python 脚本创建 XML 文件。使用 yattag 我可以做到这一点,尽管我需要的格式并不完全是这样。
我粘贴了下面的代码并且已经验证没有混合 spaces/tabs.
目标是将整个项目包装在 'node' 标签中,并为两个 'category' 标签添加 2 个子类别。我收到错误是因为在 'node' 标签之后我在 'location' 标签之前有 2 个标签。如果我修复错误,我会得到第一组代码。如果有意义的话,基本上只需要将'
<node type="document" action="create">
<location>TempCD</location>
<title>doc1</title>
<file>E:\Doc1.docx</file>
<mime>application</mime>
</node>
<category name="Content">
<attribute name="Function">asd</attribute>
<attribute name="Commodity">sf</attribute>
<attribute name="Sub-Commodity">qw</attribute>
<attribute name="Contract/Document Owner">e</attribute>
<subitems>reapply</subitems>
</category>
<category name="Content Server Categories:LYB:LYB-GSC-Contracts">
<attribute name="Supplier">Altom Transport</attribute>
<attribute name="Pricing Terms">Fixed</attribute>
<attribute name="Term Type">Fixed</attribute>
<subitems name="Commodity">reapply</subitems>
</category>
from openpyxl import load_workbook
from yattag import Doc, indent
wb = load_workbook("input_sample.xlsx")
ws = wb.worksheets[0]
# Create Yattag doc, tag and text objects
doc, tag, text = Doc().tagtext()
xml_header = '<?xml version="1.0" encoding="UTF-8"?>'
xml_schema = '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"></xs:schema>'
doc.asis(xml_header)
doc.asis(xml_schema)
for row in ws.iter_rows(min_row=2):
row = [cell.value for cell in row]
with tag('node', type=row[0], action=row[1]):
with tag("location"): text(row[2])
with tag("title"): text(row[3])
with tag("file"): text(row[4])
with tag("mime"): text(row[5])
with tag('category', name=row[6]):
with tag("attribute", name='Function'): text(row[7])
with tag("attribute", name='Commodity'): text(row[8])
with tag("attribute", name='Sub-Commodity'): text(row[9])
with tag("attribute", name='Contract/Document Owner'): text(row[10])
with tag("subitems"): text("reapply")
with tag('category', name=row[11]):
with tag("attribute", name='Supplier'): text(row[12])
with tag("attribute", name='Pricing Terms'): text(row[13])
with tag("attribute", name='Term Type'): text(row[14])
with tag("subitems"): text("reapply")
result = indent(
doc.getvalue(),
indentation = ' ',
indent_text = False
)
with open("test_resulted.xml", "w") as f:
f.write(result)
这应该会给您 xml 您正在寻找的:
from openpyxl import load_workbook
from yattag import Doc, indent
wb = load_workbook("input_sample.xlsx")
ws = wb.worksheets[0]
# Create Yattag doc, tag and text objects
doc, tag, text = Doc().tagtext()
xml_header = '<?xml version="1.0" encoding="UTF-8"?>'
xml_schema = '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"></xs:schema>'
doc.asis(xml_header)
#doc.asis(xml_schema) # invalid
with tag('root'): # required for valid xml
for row in ws.iter_rows(min_row=2):
row = [cell.value for cell in row]
with tag('node', type=row[0], action=row[1]):
with tag("location"): text(row[2])
with tag("title"): text(row[3])
with tag("file"): text(row[4])
with tag("mime"): text(row[5])
with tag('category', name=row[6]):
with tag("attribute", name='Function'): text(row[7])
with tag("attribute", name='Commodity'): text(row[8])
with tag("attribute", name='Sub-Commodity'): text(row[9])
with tag("attribute", name='Contract/Document Owner'): text(row[10])
with tag("subitems"): text("reapply")
with tag('category', name=row[11]):
with tag("attribute", name='Supplier'): text(row[12])
with tag("attribute", name='Pricing Terms'): text(row[13])
with tag("attribute", name='Term Type'): text(row[14])
with tag("subitems"): text("reapply")
result = indent(
doc.getvalue(),
indentation = ' ',
indent_text = False
)
with open("test_resulted.xml", "w") as f:
f.write(result)
输出
<?xml version="1.0" encoding="UTF-8"?>
<root>
<node type="2" action="2">
<location>2</location>
<title>2</title>
<file>2</file>
<mime>2</mime>
<category name="2">
<attribute name="Function">2</attribute>
<attribute name="Commodity">2</attribute>
<attribute name="Sub-Commodity">2</attribute>
<attribute name="Contract/Document Owner">2</attribute>
<subitems>reapply</subitems>
</category>
<category name="2">
<attribute name="Supplier">2</attribute>
<attribute name="Pricing Terms">2</attribute>
<attribute name="Term Type">2</attribute>
<subitems>reapply</subitems>
</category>
</node>
<node>
..........
</node>
..............
</root>
我试图通过读取 excel sheet 使用 python 脚本创建 XML 文件。使用 yattag 我可以做到这一点,尽管我需要的格式并不完全是这样。 我粘贴了下面的代码并且已经验证没有混合 spaces/tabs.
目标是将整个项目包装在 'node' 标签中,并为两个 'category' 标签添加 2 个子类别。我收到错误是因为在 'node' 标签之后我在 'location' 标签之前有 2 个标签。如果我修复错误,我会得到第一组代码。如果有意义的话,基本上只需要将'
<node type="document" action="create">
<location>TempCD</location>
<title>doc1</title>
<file>E:\Doc1.docx</file>
<mime>application</mime>
</node>
<category name="Content">
<attribute name="Function">asd</attribute>
<attribute name="Commodity">sf</attribute>
<attribute name="Sub-Commodity">qw</attribute>
<attribute name="Contract/Document Owner">e</attribute>
<subitems>reapply</subitems>
</category>
<category name="Content Server Categories:LYB:LYB-GSC-Contracts">
<attribute name="Supplier">Altom Transport</attribute>
<attribute name="Pricing Terms">Fixed</attribute>
<attribute name="Term Type">Fixed</attribute>
<subitems name="Commodity">reapply</subitems>
</category>
from openpyxl import load_workbook
from yattag import Doc, indent
wb = load_workbook("input_sample.xlsx")
ws = wb.worksheets[0]
# Create Yattag doc, tag and text objects
doc, tag, text = Doc().tagtext()
xml_header = '<?xml version="1.0" encoding="UTF-8"?>'
xml_schema = '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"></xs:schema>'
doc.asis(xml_header)
doc.asis(xml_schema)
for row in ws.iter_rows(min_row=2):
row = [cell.value for cell in row]
with tag('node', type=row[0], action=row[1]):
with tag("location"): text(row[2])
with tag("title"): text(row[3])
with tag("file"): text(row[4])
with tag("mime"): text(row[5])
with tag('category', name=row[6]):
with tag("attribute", name='Function'): text(row[7])
with tag("attribute", name='Commodity'): text(row[8])
with tag("attribute", name='Sub-Commodity'): text(row[9])
with tag("attribute", name='Contract/Document Owner'): text(row[10])
with tag("subitems"): text("reapply")
with tag('category', name=row[11]):
with tag("attribute", name='Supplier'): text(row[12])
with tag("attribute", name='Pricing Terms'): text(row[13])
with tag("attribute", name='Term Type'): text(row[14])
with tag("subitems"): text("reapply")
result = indent(
doc.getvalue(),
indentation = ' ',
indent_text = False
)
with open("test_resulted.xml", "w") as f:
f.write(result)
这应该会给您 xml 您正在寻找的:
from openpyxl import load_workbook
from yattag import Doc, indent
wb = load_workbook("input_sample.xlsx")
ws = wb.worksheets[0]
# Create Yattag doc, tag and text objects
doc, tag, text = Doc().tagtext()
xml_header = '<?xml version="1.0" encoding="UTF-8"?>'
xml_schema = '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"></xs:schema>'
doc.asis(xml_header)
#doc.asis(xml_schema) # invalid
with tag('root'): # required for valid xml
for row in ws.iter_rows(min_row=2):
row = [cell.value for cell in row]
with tag('node', type=row[0], action=row[1]):
with tag("location"): text(row[2])
with tag("title"): text(row[3])
with tag("file"): text(row[4])
with tag("mime"): text(row[5])
with tag('category', name=row[6]):
with tag("attribute", name='Function'): text(row[7])
with tag("attribute", name='Commodity'): text(row[8])
with tag("attribute", name='Sub-Commodity'): text(row[9])
with tag("attribute", name='Contract/Document Owner'): text(row[10])
with tag("subitems"): text("reapply")
with tag('category', name=row[11]):
with tag("attribute", name='Supplier'): text(row[12])
with tag("attribute", name='Pricing Terms'): text(row[13])
with tag("attribute", name='Term Type'): text(row[14])
with tag("subitems"): text("reapply")
result = indent(
doc.getvalue(),
indentation = ' ',
indent_text = False
)
with open("test_resulted.xml", "w") as f:
f.write(result)
输出
<?xml version="1.0" encoding="UTF-8"?>
<root>
<node type="2" action="2">
<location>2</location>
<title>2</title>
<file>2</file>
<mime>2</mime>
<category name="2">
<attribute name="Function">2</attribute>
<attribute name="Commodity">2</attribute>
<attribute name="Sub-Commodity">2</attribute>
<attribute name="Contract/Document Owner">2</attribute>
<subitems>reapply</subitems>
</category>
<category name="2">
<attribute name="Supplier">2</attribute>
<attribute name="Pricing Terms">2</attribute>
<attribute name="Term Type">2</attribute>
<subitems>reapply</subitems>
</category>
</node>
<node>
..........
</node>
..............
</root>