我有一个 python 函数,它接受部分 xml 字符串和根元素标签,并尝试构造一个有效的 xml。我无法让它发挥作用。
from lxml import etree
from lxml.builder import E
try:
root_element = 'TagStatus'
partial_xml_contents = """<Header>
<SubmissionType>TVL</SubmissionType>
<SubmissionDateTime>2019-12-19T09:20:25Z</SubmissionDateTime>
<SSIOPHubID>9001</SSIOPHubID>
</Header>
<Details>
<RecordType>TB01</RecordType>
<Status>V</Status>
<PassInfo>
<PassType>4</PassType>
<PassStartDateTime>2019-12-19T08:30:00Z</PassStartDateTime>
<PassEndDateTime>2019-12-19T18:29:59Z</PassEndDateTime>
</PassInfo>
<Class>01</Class>
<SubDetails>
<Country>US</Country>
<State>DE</State>
<Number>00003</Number>
</SubDetails>
<AccountDetails>
<AccountNumber>123</AccountNumber>
</AccountDetails>
</Details>
"""
print('root_element: %s' % str(root_element))
print('partial_contents: %s' % str(partial_xml_contents))
partial_xml_contents = partial_xml_contents.replace('\n', '')
retString = etree.tostring(E(str(root_element), E(str(partial_xml_contents)) ))
print(retString)
except Exception as e:
print(str(e))
我收到错误:标签名称和列出的部分内容无效。 根据我的理解,lxml 构建器允许使用部分块构建有效的 xml。
编辑:请参阅以下链接。 OP 有多个 xml 块(完全形成)。就我而言,我的 xml 是部分的。
lxml 的
E
工厂可以将标签名称作为参数,但不能将整个 XML 文档作为参数。以下更小(且格式良好)的示例也会导致“无效标签名称”错误:E("<tag>x</tag>")
。
以下是创建格式良好的 XML 文档的方法:
from lxml import etree
root_element = 'TagStatus'
partial_xml_contents = """
<Header>
</Header>
<Details>
</Details>"""
# Add the root element using an f-string
well_formed_xml_contents = f"<{root_element}>{partial_xml_contents}</{root_element}>"
# Verify that there are no errors
root = etree.fromstring(well_formed_xml_contents)