如何在 PyYaml 中添加自定义嵌套标签?
How to add custom nested tags in PyYaml?
我希望能够使用嵌套标签
我使用下面的代码让自定义标签单独工作,但无法在相同的值中使用两者
SafeLoader.add_constructor("!include", include)
SafeLoader.add_constructor("!path", gen_path)
这就是我的示例 yaml 的样子
key: !include !path special_file.yaml
注:
!path => 从 mysql
进行一些处理后生成一个特殊路径
!include => 将文件的 yaml 内容加载到当前阅读数据中
你的是 shorthand 标签,如果你查看 YAML 1.1 规范中的生产规则,你会看到:
[112] c-ns-shorthand-tag ::= ( c-primary-tag-handle ns-tag-char+ )
| ( ns-secondary-tag-handle ns-uri-char+ )
| ( c-named-tag-handle ns-uri-char+ )
该规则仅用于标签 属性:
[110] c-ns-tag-property ::= c-verbatim-tag | c-ns-shorthand-tag
| c-ns-non-specific-tag
并且在节点属性中使用:
[107] c-ns-properties(n,c) ::= ( c-ns-tag-property
( s-separate(n,c) c-ns-anchor-property )? )
| ( c-ns-anchor-property
( s-separate(n,c) c-ns-tag-property )? )
如您所见,其中 none 包括标签元素本身的重复,仅针对标签 ( ns-tag-char+
) 中的字符。
因此在 YAML 的单个节点上不能有多个标签。
PyYAML 部分实现的 YAML 1.1 规范在十多年前被 YAML 1.2 取代,但它具有相同的限制,因此它不会为您升级 YAML 解析器带来任何好处。
我希望能够使用嵌套标签
我使用下面的代码让自定义标签单独工作,但无法在相同的值中使用两者
SafeLoader.add_constructor("!include", include)
SafeLoader.add_constructor("!path", gen_path)
这就是我的示例 yaml 的样子
key: !include !path special_file.yaml
注:
!path => 从 mysql
进行一些处理后生成一个特殊路径!include => 将文件的 yaml 内容加载到当前阅读数据中
你的是 shorthand 标签,如果你查看 YAML 1.1 规范中的生产规则,你会看到:
[112] c-ns-shorthand-tag ::= ( c-primary-tag-handle ns-tag-char+ )
| ( ns-secondary-tag-handle ns-uri-char+ )
| ( c-named-tag-handle ns-uri-char+ )
该规则仅用于标签 属性:
[110] c-ns-tag-property ::= c-verbatim-tag | c-ns-shorthand-tag
| c-ns-non-specific-tag
并且在节点属性中使用:
[107] c-ns-properties(n,c) ::= ( c-ns-tag-property
( s-separate(n,c) c-ns-anchor-property )? )
| ( c-ns-anchor-property
( s-separate(n,c) c-ns-tag-property )? )
如您所见,其中 none 包括标签元素本身的重复,仅针对标签 ( ns-tag-char+
) 中的字符。
因此在 YAML 的单个节点上不能有多个标签。
PyYAML 部分实现的 YAML 1.1 规范在十多年前被 YAML 1.2 取代,但它具有相同的限制,因此它不会为您升级 YAML 解析器带来任何好处。