Python:通过读取字符串

时间:2019-03-11 15:07:01

标签: python xml-parsing

我是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元素中, 导致类似

<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>

我尝试使用append方法导致错误

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

但是我得到了一个错误 追溯(最近一次通话): add_cfg_under_correct_student     student.append(ET.fromstring(cfg_to_be_added))

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

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

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

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

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

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

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

lxml.etree.XMLSyntaxError:文档末尾,第1行,第27列

然后我尝试使用ET.ElementTree(ET.fromstring(xmlstring)) this答案中建议的选项,但仍会收到类似的错误。

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

上面问题中提到的解决方案是否在子元素上使用扩展工作,而子元素又可以在子元素之下?

请帮助

0 个答案:

没有答案