YAML中管道符号的用途是什么?

时间:2013-03-21 06:10:26

标签: yaml

我是yaml的新手,我对用于多行的管道符号(|)有疑问。 YAML是否有类似下面的语法?

  

测试: | 6 +

在下面的两个YAML文件中,第一个是工作,第二个不是。我不知道造成这种情况的原因。

第一个文件

Name :
  -
   testing:
     val1
  -
   second:
     val2
  -
   third:
     val3
  -
   then
  - 
    final: |
     a
     aa
     aaa
     aaaa : 'test:'

第二档

Name :
  -
   testing:
     val1
  -
   second:
     val2
  -
   third:
     val3
  -
   then
  - 
    final: |6+
      a
      aa
      aaa
      aaaa : 'test:'

第二个文件是客户的。

我正在使用XMLBeans,我收到此错误:

  

com.esotericsoftware.yamlbeans.parser.Parser $ ParserException:第17行,第12列:预期“块结束”但发现:块映射开始“

2 个答案:

答案 0 :(得分:115)

YAML中行末尾的管道符号表示后面的任何缩进文本都应解释为多行标量值。请参阅the YAML spec

具体来说,管道表明(缩进除外)标量值应以字面方式解释,以保留换行符。相反,>字符表示跟随多行“折叠”标量,这意味着换行符将转换为空格。例如:

>>> import yaml
>>> yaml.load("""
... |
...  This is a multi-line
...  literal style scalar.
... """)
'This is a multi-line\nliteral style scalar.\n'
>>> yaml.load("""
... >
...  This is a multi-line
...  folded scalar; new lines are folded into
...  spaces.
... """)
'This is a multi-line folded scalar; new lines are folded into spaces.\n'

6+部分是缩进指示符(应该使用多少缩进空间的明确规范)和“chomping indicator”+,它控制标量末尾的额外空格。文字应该处理。

你得到的错误很棘手:这是因为缩进应该与当前的块级元素相关。所以在这种情况下,它应该是4+而不是6+,因为最后一个块级元素是数组项(由-指定),文字从它缩进4。有点令人惊讶的是final: |映射不被视为块元素,即使它的值是多行的。如果你想一想它就有意义了 - 它仍然只是一个“一线”的“关键:价值”映射。该值恰好是对多行标量值使用特殊语法。令人困惑,但不知怎的一致......

答案 1 :(得分:8)

当您希望将新闻行保留为换行时使用管道。

有关更多信息:https://yaml-multiline.info/