Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从简单字符串向元素添加带标记的文本?_Python_Xml_Lxml - Fatal编程技术网

Python 如何从简单字符串向元素添加带标记的文本?

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

使用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行
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的原因,但它没有像我所想的那样工作。我澄清了我在这方面的问题。谢谢