xml是这样的,我如何解析如下的字典数据:
{“文字”:“每个人都听。”,“字体”:“Arial”,“尺寸”:20}
标签名称总是“Name”和“Value”,我知道python xml模块中有getElementsByTagName的方法,有没有方法可以做到这一点?
<effect>
<name>Text</name>
<effectid>Text</effectid>
<effectcategory>Text</effectcategory>
<effecttype>generator</effecttype>
<mediatype>video</mediatype>
<parameter>
<parameterid>str</parameterid>
<name>Text</name>
<value>Everyone listen up.</value>
</parameter>
<parameter>
<parameterid>fontname</parameterid>
<name>Font</name>
<value>Arial</value>
</parameter>
<parameter>
<parameterid>fontsize</parameterid>
<name>Size</name>
<valuemin>0</valuemin>
<valuemax>1000</valuemax>
<value>20</value>
</parameter>
<parameter>
<parameterid>fontstyle</parameterid>
<name>Style</name>
<valuemin>1</valuemin>
<valuemax>4</valuemax>
<valuelist>
<valueentry>
<name>Plain</name>
<value>1</value>
</valueentry>
<valueentry>
<name>Bold</name>
<value>2</value>
</valueentry>
<valueentry>
<name>Italic</name>
<value>3</value>
</valueentry>
<valueentry>
<name>Bold/Italic</name>
<value>4</value>
</valueentry>
</valuelist>
<value>1</value>
</parameter>
</effect>
答案 0 :(得分:1)
使用xml.dom.minidom
解析xml从未如此有趣(真的考虑使用BeautifulSoup,xml.etree.ElementTree或lxml)。
您应该从哪里开始:
from pprint import pprint
from xml.dom.minidom import parse, Text, parseString
data = """your xml goes here"""
dom = parseString(data)
result = {}
effect = dom.getElementsByTagName('effect')[0]
result['name'] = effect.getElementsByTagName('name')[0].firstChild.nodeValue
parameters = []
for parameter in effect.getElementsByTagName('parameter'):
id = parameter.getElementsByTagName('parameterid')[0].firstChild.nodeValue
name = parameter.getElementsByTagName('name')[0].firstChild.nodeValue
value = parameter.getElementsByTagName('value')[0].firstChild.nodeValue
parameters.append({'id': id, 'name': name, 'value': value})
result['parameters'] = parameters
pprint(result)
打印:
{'name': u'Text',
'parameters': [{'id': u'str', 'name': u'Text', 'value': u'Everyone listen up.'},
{'id': u'fontname', 'name': u'Font', 'value': u'Arial'},
{'id': u'fontsize', 'name': u'Size', 'value': u'20'},
{'id': u'fontstyle', 'name': u'Style', 'value': u'1'}]}