Python 如何从简单字符串向元素添加带标记的文本?
使用PythonLXML,我想生成一个etree.Element,其内容取自字符串。我有两个案子: 这是一个简单的字符串,例如:Hello world!。 它是一个带标签的字符串,但对于python来说,它仍然是一个字符串,我事先不知道它是一个带标签的字符串!。 第二种情况如何处理 这是一种幼稚的、不起作用的方式: >>>从lxml导入etree >>>你好! >>>xml=etree.Element'root' >>>xml.text=string >>>etree.toString XML ... b'select=world/!'的Hello值 我很清楚,如果我知道字符串的结构,我必须使用etree.Element的tail方法,如中所述。因此,这里有一个功能性的,而不是一般化的方法: >>>从lxml导入etree >>>xml2=etree.Element'root' >>>xml2.text=Hello >>>valueof=etree.SubElementxml2,“值” >>>值。设置“选择”、“世界” >>>valueof.tail='!' >>>etree.tostringxml2 ... “你好!” 但如何在不事先知道确切字符串的情况下自动执行此操作 我不知道如何解析字符串,以便拆分它的各个部分。或者我应该试试另一种方法 我试过这个: >>>从lxml导入etree >>>从io导入StringIO >>>你好! >>>tree=etree.parseStringIOstring 回溯最近一次呼叫上次: 文件,第1行,在 lxml.etree.parse src/lxml/lxml.etree.c:81117中的文件src/lxml/lxml.etree.pyx,第3427行 lxml.etree中的文件src/lxml/parser.pxi,第1828行。_parsedocumentsrc/lxml/lxml.etree.c:118072 lxml.etree中的文件src/lxml/parser.pxi,第1848行。_parsememorydocumentsrc/lxml/lxml.etree.c:118341 lxml.etree中的文件src/lxml/parser.pxi,第1729行。\u parseDoc src/lxml/lxml.etree.c:116899 lxml.etree.\u BaseParser.\u parseUnicodeDoc src/lxml/lxml.etree.c:110886中的文件src/lxml/parser.pxi,第1063行 lxml.etree.\u ParserContext.\u handleParseResultDoc src/lxml/lxml.etree.c:105109中的文件src/lxml/parser.pxi,第595行 lxml.etree中的文件src/lxml/parser.pxi,第706行。\u handleParseResult src/lxml/lxml.etree.c:106817 lxml.etree中的文件src/lxml/parser.pxi,第635行。\u raiseParserError src/lxml/lxml.etree.c:105671 文件,第1行Python 如何从简单字符串向元素添加带标记的文本?,python,xml,lxml,Python,Xml,Lxml,使用PythonLXML,我想生成一个etree.Element,其内容取自字符串。我有两个案子: 这是一个简单的字符串,例如:Hello world!。 它是一个带标签的字符串,但对于python来说,它仍然是一个字符串,我事先不知道它是一个带标签的字符串!。 第二种情况如何处理 这是一种幼稚的、不起作用的方式: >>>从lxml导入etree >>>你好! >>>xml=etree.Element'root' >>>xml.text=string >>>etree.toString XML
lxml.etree.XMLSyntaxError:需要开始标记,“只需将字符串简单或标记在根元素中,使其成为格式良好的XML
from lxml import etree
simple = "Hello world!"
tagged = "Hello <value-of select=\"world\"/>!"
xml1 = "<root>" + simple + "</root>"
xml2 = "<root>" + tagged + "</root>"
# fromstring() returns an Element object
elem1 = etree.fromstring(xml1)
elem2 = etree.fromstring(xml2)
只需将字符串simple或taged包装在根元素中,使其成为格式良好的XML
from lxml import etree
simple = "Hello world!"
tagged = "Hello <value-of select=\"world\"/>!"
xml1 = "<root>" + simple + "</root>"
xml2 = "<root>" + tagged + "</root>"
# fromstring() returns an Element object
elem1 = etree.fromstring(xml1)
elem2 = etree.fromstring(xml2)
etree.parse需要格式良好的XML。你好由于没有根元素,所以格式不正确。@mzjn绝对正确,这就是我尝试使用recover=True的原因,但它没有像我所想的那样工作。我澄清了我在这方面的问题。Thank.etree.parse需要格式良好的XML。你好由于没有根元素,所以格式不正确。@mzjn绝对正确,这就是我尝试使用recover=True的原因,但它没有像我所想的那样工作。我澄清了我在这方面的问题。谢谢