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


126

我是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列:预期为“块结束”,但找到:块映射开始”

Answers:


178

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 indicator”(斩断指示符)+,它控制应如何处理标量文字末尾的多余空格。

您得到的错误是一个棘手的错误:这是因为缩进应相对于当前块级元素。因此,在这种情况下,应该4+代替,6+因为最后一个块级元素是数组项(由指定-),并且文字从其缩进4。令人惊讶的final: |是,即使映射的值是多行的,它也不会被视为块元素。如果您考虑一下,这是有道理的-它仍然只是“单线”“键:值”映射。该值恰好是针对多行标量值使用特殊语法。令人困惑,但始终保持一致...


6
当您说“应该使用多少行缩进”时,您是说缩进字符(比如说空格)吗?还是真的行?
ROunofF

5
@ROunofF四岁的答案,你是第一个指出这一点的人。它应该说“缩进空间”。我会解决的。
Iguananaut


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.