2013-03-21 28 views
38

私はyamlに新しいです、私は質問があります。複数の行に使用されるパイプ記号(|)。 にyamlに次のような構文がありますか?yamlのパイプシンボルの使用方法

テスト:| 6+

私は最初に1が動作していると第二ではない、2以下のような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:' 

P.S:セカンドファイルは、顧客のです。 私はxmlbeansを使用していますが、"com.esotericsoftware.yamlbeans.parser.Parser $ ParserException:Line 17、column 12: 'ブロック終了'が必要ですが、見つかった:ブロックマッピング開始"。 "私が使用しています" の近くに追加

編集 のXMLBeans。

答えて

67

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+部分がどのように余分な空白リテラルスカラーの終わりに制御する「早まっインジケータ」+と押し込みインジケータ(使用されるべきであるどのように多くのインデントのスペースを明示的に指定)であります処理する必要があります。

エラーは難解です。これは、インデントが現在のブロックレベルの要素に関連している必要があるためです。したがって、最後のブロックレベル要素が配列項目(-で指定されている)であり、リテラルが4つインデントされているため、6+の代わりに4+である必要があります。幾分驚くべきことに、final: |のマッピングは、その値が複数行になっていてもブロック要素と見なされません。あなたがそれについて考えるならば、それは意味をなさない - それはまだ単一行の "キー:値"マッピングです。この値は、複数行のスカラー値に対して特別な構文を使用している場合があります。混乱していますが、どういうわけか一貫しています...

+0

「どのくらいの行のインデントを使用するか」と言うと、インデント文字を意味しますか?本当に線? – ROunofF

+1

@ROunofF 4歳の答えとあなたはそれを指摘する最初の人です。それは "インデントのスペース"と言うべきです。私はそれを修正します。 – Iguananaut

+1

http://yaml-multiline.info/デモで非常に良い説明があります。 –

関連する問題