我正在尝试将xml树转储到json。
xml = """<MODEL>
<RULE COMMENT="" DEFAULTPRIORITY="50" DESCRIPTION="Equipment" RULECLASSIFICATION="ASSIGN" TRIGGER="1">
<BOOLOP BOOLOP="and" SEQ="0" TYPE="0">
<BOOLOP BOOLOP="or" SEQ="1" TYPE="0">
<FRAGMENT FUNC1="value" FUNC2="literal" NULLACTION="Fragment is false" OP="=" PROP1="TYPE" PROP2="PURCHASE" SEQ="1" TYPE="1"/>
<FRAGMENT FUNC1="value" FUNC2="literal" NULLACTION="Fragment is false" OP="=" PROP1="TYPE" PROP2="LEASE" SEQ="2" TYPE="1"/>
</BOOLOP>
<BOOLOP BOOLOP="or" SEQ="4" TYPE="0">
<FRAGMENT FUNC1="value" FUNC2="propval" NULLACTION="Fragment is false" OP="=" PROP1="PICK_SKU1" PROP2="._sku" SEQ="1" TYPE="1"/>
<FRAGMENT FUNC1="value" FUNC2="propval" NULLACTION="Fragment is false" OP="=" PROP1="PICK_SKU10" PROP2="._sku" SEQ="2" TYPE="1"/>
</BOOLOP>
</BOOLOP>
<ACTION FORMULA="1" PROPNAME="" PROPVALUE="" SEQ="0" TYPE="1">
<LOCALES/>
<ACTIONITEM SEQ="0" item="." max="1" min="0" qty="1"/>
</ACTION>
</RULE>
<RULE COMMENT="" DEFAULTPRIORITY="50" DESCRIPTION="PickIfInviewAccountingSelected">
<BOOLOP BOOLOP="and" SEQ="0" TYPE="0">
<FRAGMENT FUNC1="value" FUNC2="literal" NULLACTION="Fragment is false" OP="=" PROP1="WSelected" PROP2="Web" SEQ="1" TYPE="1"/>
<FRAGMENT FUNC1="propval" FUNC2="literal" NULLACTION="Fragment is false" OP="=" PROP1="ed" PROP2="1" SEQ="2" TYPE="1"/>
</BOOLOP>
<ACTION FORMULA="1" PROPNAME="" PROPVALUE="" SEQ="0" TYPE="1">
<LOCALES/>
<ACTIONITEM SEQ="0" item="." max="1" min="0" qty="1"/>
</ACTION>
</RULE>
</MODEL>
"""
首先,我尝试在对XML进行迭代时将其插入字典中。
data={}
for movie in tree.findall("MODEL/RULE"):
if movie.findall("./ACTION/ACTIONITEM/[@max='1']") and movie.findall("./ACTION/ACTIONITEM/[@min='0']") and movie.findall("./ACTION/ACTIONITEM/[@qty='1']"):
#print(movie.attrib['NAME'])
for child in movie.iter():
if child.tag == 'BOOLOP' or child.tag == 'FRAGMENT':
data[movie.attrib['NAME']] = child.tag, child.attrib
然后将字典转储为JSON:
result = json.dumps(data, indent=4, sort_keys=True)
print(result)
我面临的问题是,它仅将xml中的FRAGMENT标签附加到dict而不是BOOLOP标签。如果我删除了if条件,那么它将一起输出不同的输出。
为什么我的代码没有将所有内容附加到字典中。循环是错误的还是我添加到字典的方式是?
我期望的示例JSON输出为:
RULE
{
BOOLOP
{
BOOLOP
{
FRAGMENT
{
}
}
BOOLOP
{
FRAGMENT
{
}
}
}
}