首页 > 解决方案 > 用逻辑标签转 XML(即,) 转换为 Python 中的 lambda 函数或表达式字符串

问题描述

我有一些 XML 定义了不同的状态,例如下面的示例(它们的复杂性各不相同)。

输入:

<State>
   <Or>
      <And>
         <Var>v1</Var>
         <Var>v2</Var>
         <Var>v3</Var>
      </And>
      <And>
         <Or>
            <Var>v4</Var>
            <Var>v5</Var>
            <Var>v6</Var>
         </Or>
         <Var>v1</Var>
      </And>
      <Var>v7</Var>
   </Or>
</State>

有没有一种方法可以递归地解析这个 XML 元素,并在这个过程中生成一个表达式字符串(或者在事后,基于其他一些中间数据结构)?

期望的输出:

exprStr = "(d['v1'] and d['v2'] and d['v3']) or ((d['v4'] or d['v5'] or d['v6']) and d['v1']) or d['v7']"

# BONUS POINTS: Technically, I'd prefer having a lambda function instead of a string, 
# but I have no idea if that's even possible to construct dynamically

如果有帮助,在初始设置期间,我目前正在将状态解析为这样的结构,尽管我对不同的数据结构持开放态度:

parsedState = {
   'Or': [{'And': ['v1', 'v2', 'v3']},
          {'And': [{'Or': ['v4', 'v5', 'v6']},
                   'v1']},
          'v7']
}

XML 中引用的变量以及它们的当前值都存储在一个字典中,如下所示:

d = {
   'v1': True,
   'v2': False,
   'v3': True,
   'v4': True,
   'v5': False,
   'v6': False,
   'v7': True,
}

标签: pythonxmllambdalogical-operators

解决方案


推荐阅读