考虑这个Yaml
- node_1:
properties: &node_1_prop
role: management
layer: 1
- node_2:
properties:
level: 24
<<: *node_1_prop
我正在尝试使用snakeyaml
库创建节点图,并且期望node_1
具有两个属性,node_2
具有三个属性,例如this。
Path yamlPath = Paths.get( "nodes.yaml");
InputStream yamlStream = Files.newInputStream(yamlPath);
StreamReader sreader = new StreamReader(new UnicodeReader(yamlStream));
Composer composer = new Composer(new ParserImpl(sreader), new Resolver());
Node rootNode = composer.getSingleNode();
snakeyaml的输出节点图显示<<
作为node_2
的属性。
显示在Git上结果的代码示例。
编辑:
如果我按如下方式定义yaml,则节点的构造会很好:
- node_1:
properties: &node_1_prop
role: management
layer: 1
- node_2:
<<: *node_1_prop
但是,我的要求不仅是照原样复制属性,而且要具有其他属性。
答案 0 :(得分:3)
您没有完全加载YAML,仅编写(请参见SnakeYaml实现的graph in the YAML 1.1 spec)。
compose步骤可解析别名,但保留标签-标签在构建过程中被解析。合并键已定义为as a tag,因此在编写YAML输入时不会被处理。