我是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,我得到这个错误:

$ParserException:第17行,第12列:期望一个'块结束',但发现:块映射开始"。


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的更正。


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

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