我正在编写一个从某些XML创建文件的函数。根据参数dataSort
,可以将不同的标记作为源数据。这是一个小例子代码,如果有效,则输出“Success”。它在这个变种中。使用此代码进行测试。
abstract class MessageData {
static enum DataSort{REQUEST,RESPONSE}
static Map<DataSort,String> xmlTag = [REQUEST:'input_parameters', RESPONSE:'output_parameters']
static void exportSimulator(){
DataSort dataSort= DataSort.REQUEST
Node rootNode = new XmlParser().parseText(
"""
<root>
<api>
<input_parameters>
Success
</input_parameters>
</api>
</root>
""")
String tag = xmlTag["$dataSort"]
def field = rootNode.api."$tag"
println field.text()
}
}
我想把最后两行写成一个。如果我写的话
"$xmlTag["$dataSort"]"
,
第一次解析后的Groovy将其解释为"$xmlTag[REQUEST]"
,此地图地址将找到null
,结果为空。如果我写的话
"$xmlTag[$dataSort]"
,
我真的不知道它将如何被解析,但它也给了null
。
我可以直接从地图上获取变量标签吗?
顺便说一句,对于有关Groovy解析的更好来源的任何建议,我将不胜感激。以下仅供正确搜索:
问题不在于解析,而是在
中答案 0 :(得分:2)
我相信您可以这样做,但必须在import {
CLIENT_EVENTS: { RTM: RTM_CLIENT_EVENTS },
} from '@slack/client';
之间使用它,如下所示:
"${..}"
以下是整个脚本,可以在适用的情况下在线测试独立和评论:
rootNode.api."${xmlTag[dataSort]}"
您可以在线快速尝试 Demo
以下两个陈述产生相同的结果:
enum DataSort{REQUEST,RESPONSE}
//Need to use key in between (..) as REQUEST, RESPONSE are not string literals in here
Map<DataSort,String> xmlTag = [(DataSort.REQUEST):'input_parameters', (DataSort.RESPONSE):'output_parameters']
def exportSimulator = {
DataSort dataSort= DataSort.REQUEST
//Used slurper
def rootNode = new XmlSlurper().parseText(
"""
<root>
<api>
<input_parameters>
Success
</input_parameters>
</api>
</root>
""")
//Here is the main change that you are interested in
def field = rootNode.api."${xmlTag[dataSort]}"
println field.text().trim()
}
exportSimulator()