python - 用逻辑标签转 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,
}
解决方案
推荐阅读
- python - 将python列表中的数据合并到一个数据框中
- node.js - 通过 npm 安装的 Angular 第三方模块的版本是否重要?
- c# - 适用于 Unity (3.15.1) 的 Admob 2018 包未在 android 移动设备(横幅、插页式、奖励视频等)中显示广告
- entity-framework-6 - IncludeFilter 多个级别不起作用
- mongodb - MongoDB搜索具有一系列键名的子文档?
- python - 更改直方图 x 轴范围
- r - 有效的时间加权平均值
- ruby-on-rails - Rails:“bundle install”由于旧的 rails 版本(3.2)而失败
- android - 我可以在 android webview 应用程序中使用 3rd 方广告网络广告吗?
- unity3d - Unity + Hololens 模拟器中的 PhotoCapture 拍摄奇怪的照片