lxml.objectify 无法解析没有引号的属性 - 需要 recover=Ttrue
lxml.objectify can not parse attrib without quotes - need recover=Ttrue
有人知道如何将 lxml.objectify
与 recover=True
一起使用吗?
我有 xml 属性没有被引用 --> name=value 而不是 name='value'.
下面是一些示例代码...我无法控制 XML 格式,所以我不能返回并更改它。 etree
解析有效
错误是
File "<string>", line unknown
XMLSyntaxError: AttValue: " or ' expected, line 4, column 21
lxml.objectify
代码 -- 失败
xmlSample="""<dict>
<maptable>
<hdterm displevel=1 autlookup entrytype=1>Source term</hdterm>
</maptable>
</dict>"""
如果我没有得到答复,我是否必须重新
import io
#p = objectify.XMLParser(recover=True)
root = objectify.fromstring(xmlSample)
# returns attributes in element node as dict
attrib = root.getattrib()
# how to extract element data
tbl = root.mytable
print("root.mytable type=%s" % type(tbl))
lxml.etree
- 成功了!
from lxml import etree, objectify
import io
xmlIO = io.StringIO(xmlSample)
p = etree.XMLParser(recover=True)
tree = etree.parse(xmlIO, parser=p)
root = tree.getroot()
print(root.tag)
输出:
myxml
更新:
原来您可以将 recover=True
选项传递给 objectify.makeparser()
以创建一个解析器来尝试恢复格式错误的 XML 文档。然后你可以将创建的解析器传递给 objectify.fromstring()
,像这样:
from lxml import etree, objectify
xmlSample="""<dict>
<maptable>
<hdterm displevel=1 autlookup entrytype=1>Source term</hdterm>
</maptable>
</dict>"""
parser = objectify.makeparser(recover=True)
root = objectify.fromstring(xmlSample, parser)
print(type(root.maptable.hdterm))
# output :
# <type 'lxml.objectify.StringElement'>
初始答案:
你可以把两者结合起来; etree
用 recover=True
修复损坏的 XML 输入,然后 objectify
解析格式正确的中间 XML :
from lxml import etree, objectify
xmlSample="""your_xml_here"""
p = etree.XMLParser(recover=True)
well_formed_xml = etree.fromstring(xmlSample, p)
root = objectify.fromstring(etree.tostring(well_formed_xml))
有人知道如何将 lxml.objectify
与 recover=True
一起使用吗?
我有 xml 属性没有被引用 --> name=value 而不是 name='value'.
下面是一些示例代码...我无法控制 XML 格式,所以我不能返回并更改它。 etree
解析有效
错误是
File "<string>", line unknown
XMLSyntaxError: AttValue: " or ' expected, line 4, column 21
lxml.objectify
代码 -- 失败
xmlSample="""<dict>
<maptable>
<hdterm displevel=1 autlookup entrytype=1>Source term</hdterm>
</maptable>
</dict>"""
如果我没有得到答复,我是否必须重新
import io
#p = objectify.XMLParser(recover=True)
root = objectify.fromstring(xmlSample)
# returns attributes in element node as dict
attrib = root.getattrib()
# how to extract element data
tbl = root.mytable
print("root.mytable type=%s" % type(tbl))
lxml.etree
- 成功了!
from lxml import etree, objectify
import io
xmlIO = io.StringIO(xmlSample)
p = etree.XMLParser(recover=True)
tree = etree.parse(xmlIO, parser=p)
root = tree.getroot()
print(root.tag)
输出:
myxml
更新:
原来您可以将 recover=True
选项传递给 objectify.makeparser()
以创建一个解析器来尝试恢复格式错误的 XML 文档。然后你可以将创建的解析器传递给 objectify.fromstring()
,像这样:
from lxml import etree, objectify
xmlSample="""<dict>
<maptable>
<hdterm displevel=1 autlookup entrytype=1>Source term</hdterm>
</maptable>
</dict>"""
parser = objectify.makeparser(recover=True)
root = objectify.fromstring(xmlSample, parser)
print(type(root.maptable.hdterm))
# output :
# <type 'lxml.objectify.StringElement'>
初始答案:
你可以把两者结合起来; etree
用 recover=True
修复损坏的 XML 输入,然后 objectify
解析格式正确的中间 XML :
from lxml import etree, objectify
xmlSample="""your_xml_here"""
p = etree.XMLParser(recover=True)
well_formed_xml = etree.fromstring(xmlSample, p)
root = objectify.fromstring(etree.tostring(well_formed_xml))