Я пытаюсь сбросить дерево 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)
Проблема, с которой я сталкиваюсь, заключается в том, что к элементу dict добавляется только тег FRAGMENT, а не тег BOOLOP.И если я удаляю условие if, то это выводит другой вывод все вместе.
Почему мой код не добавляет все в словарь.Это неправильный цикл или способ добавления в словарь?
Мой ожидаемый пример вывода JSON:
RULE
{
BOOLOP
{
BOOLOP
{
FRAGMENT
{
}
}
BOOLOP
{
FRAGMENT
{
}
}
}
}