191

我是 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 列:应为“块结束”,但发现:块映射开始”

4

2 回答 2

261

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

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

>>> 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 指示符” +,它控制应如何处理标量文字末尾的额外空格。

您得到的错误是一个棘手的错误:这是因为缩进应该与当前的块级元素相关。所以在这种情况下,它应该是2+,而不是6+因为最后一个块级元素是映射final:并且文字从它缩进 2。更新了来自@bramvi 的更正。

于 2013-09-09T22:37:58.740 回答
28

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

欲了解更多信息:https ://yaml-multiline.info/

于 2020-05-07T15:03:45.430 回答