将根元素作为变量传递

问题描述 投票:0回答:1

我有一个 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 是部分的。

使用python将xml附加到xml。我有两个需要合并的xml文件。所以无论如何我可以合并这两个文件

python lxml
1个回答
0
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.