基于ERB语法的YAML元素求值:提取指定元素并输出YAML字符串
处理含ERB代码块的YAML文件:提取并执行指定元素的ERB模板
可以用Ruby实现这个需求,因为Ruby原生支持ERB模板解析和YAML处理,以下是完整的实现代码:
require 'yaml' require 'erb' # 读取目标YAML文件内容 yaml_content = File.read('your_target_file.yaml') # 将YAML解析为Ruby数组 yaml_data = YAML.load(yaml_content) # 指定要提取的元素索引(注意:第1个元素对应索引0,第2个对应索引1,以此类推) target_index = 0 # 替换为你需要的第N个元素的索引(N-1) target_item = yaml_data[target_index] # 创建ERB执行的上下文绑定 binding_context = binding # 执行pre字段中的ERB代码,将变量注入上下文 ERB.new(target_item['pre']).result(binding_context) # 用上下文渲染sentence字段的ERB模板 processed_sentence = ERB.new(target_item['sentence']).result(binding_context) # 构建输出的YAML结构 output_item = { 'id' => target_item['id'], 'pre' => '', 'sentence' => processed_sentence } # 转换为YAML字符串并输出 puts YAML.dump([output_item])
代码说明
- YAML读取与解析:通过
YAML.load将文件内容转换为Ruby数组,方便单独操作每个元素 - 目标元素提取:根据需求的第N个元素,对应数组的
N-1索引(Ruby数组从0开始计数) - ERB执行流程:先运行
pre字段中的ERB代码生成变量,再用这些变量渲染sentence字段的ERB模板 - 输出构建:清空
pre字段内容,保留原id和处理后的sentence,最终转换为标准YAML格式输出
示例运行结果
当target_index设为0(提取第1个元素)时,输出的YAML内容如下:
--- - id: "1" pre: "" sentence: "The result of 3 + 4 is 7"
内容的提问来源于stack exchange,提问作者somenxavier
相关产品推荐
相关产品推荐

