首页 > 解决方案 > Python:通过从字符串读取将多个子元素附加到父元素

问题描述

我是 python 新手,试图读取和添加由字符串表示的多个 xml 元素作为 XML 元素的子元素。

例如:

<student>
        <name>abc</name>
        <description>abcd</description>     
        <regno>200</regno>
</student>

我有一个字符串可以代表更多的学生信息,其中也可能包含嵌套信息。例如:

"<grade>100</grade><address-info><street>xyz</street><city>efgh</city><zip>505050</zip></address-info>"

我需要解析这个字符串并将其添加到学生元素中并产生类似的结果

<student>
    <name>abc</name>
    <description>abcd</description>     
    <regno>200</regno>
    <grade>100</grade>
    <address-info>
         <street>xyz</street>
         <city>efgh</city>
         <zip>505050</zip>
     </address-info>
</student>

我尝试使用导致错误的附加方法

def add_cfg_under_correct_student(in_name, cfg_to_be_added, root):
    if root is None:
        return True
    for student in root.findall('student'):
        name = student.find('name')
        if name.text != in_name:
            continue
        student.append(ET.fromstring(cfg_to_be_added))
    return True

但是我收到了一个错误,因为 Traceback(最近一次通话最后一次): add_cfg_under_correct_student student.append(ET.fromstring(cfg_to_be_added))

文件“src/lxml/lxml.etree.pyx”,第 3213 行,在 lxml.etree.fromstring (src/lxml/lxml.etree.c:79003)

文件“src/lxml/parser.pxi”,第 1848 行,在 lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:118334)

文件“src/lxml/parser.pxi”,第 1736 行,在 lxml.etree._parseDoc (src/lxml/lxml.etree.c:117014)

文件“src/lxml/parser.pxi”,第 1102 行,在 lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:111258)

文件“src/lxml/parser.pxi”,第 595 行,在 lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:105102)

文件“src/lxml/parser.pxi”,第 706 行,在 lxml.etree._handleParseResult (src/lxml/lxml.etree.c:106810)

文件“src/lxml/parser.pxi”,第 635 行,在 lxml.etree._raiseParseError (src/lxml/lxml.etree.c:105664) 文件“”,第 1 行

lxml.etree.XMLSyntaxError:文档末尾的额外内容,第 1 行,第 27 列

然后我尝试按照this answer中的建议使用 ET.ElementTree(ET.fromstring(xmlstring)) 选项,但仍然出现类似错误。

然后我在这个问题中查找了关于一次添加多个元素的另一个答案,但它并不能完全解决我的情况。

上述问题中提到的解决方案是否对子元素使用扩展工作,而这些子元素下也可能有子元素?

请帮忙

标签: pythonxml-parsing

解决方案


推荐阅读