6

のように解析YAML Front Matterしなければならないので、ソースコードを調べたところ、これが見つかりましたが、あまり意味がありません(ルビーはあまり知りません)。javajekyll

私の質問は、YAML Front MatterJava で解析するにはどうすればよいですか?

クラスパスにsnakeyamlがあり、pegdown使用YAML Front Matterするマークダウンファイルから解析します

4

3 に答える 3

8
void parse(Reader r) throws IOException {
    BufferedReader br = new BufferedReader(r);

    // detect YAML front matter
    String line = br.readLine();
    while (line.isEmpty()) line = br.readLine();
    if (!line.matches("[-]{3,}")) { // use at least three dashes
        throw new IllegalArgumentException("No YAML Front Matter");
    }
    final String delimiter = line;

    // scan YAML front matter
    StringBuilder sb = new StringBuilder();
    line = br.readLine();
    while (!line.equals(delimiter)) {
        sb.append(line);
        sb.append("\n");
        line = br.readLine();
    }

    // parse data
    parseYamlFrontMatter(sb.toString());
    parseMarkdownOrWhatever(br);
}

取得するにReaderは、おそらくFileReaderまたはが必要InputStreamReaderです。

于 2012-08-16T11:01:26.010 に答える
2

フロントの問題だけに興味がある場合は、SnakeYaml の loadAll メソッドを使用できます。

Object yamlFrontMatter(Yaml yaml, InputStream in) {
    return yaml.loadAll().iterator().next();
}

SnakeYaml は、最初の yaml 構造 (前付け) のみを読み取り、末尾の yaml 以外のテキストを無視します。

残念ながら、SnakeYaml には残りのテキストを出力する洗練された方法がないため、前付と本文の両方を同時に解析したい場合、このアプローチには利点がありません :-(

于 2013-01-15T17:25:15.093 に答える
2

わかりました、あなたのコメントはあなたの質問が何であるかを明確にしたので:

yaml フロント マターは、3 つのダッシュ ( ---) で囲まれた行の内側にあるすべてです。YAML フロント マターは常にファイルの先頭にあります。

したがって、ファイルを解析して、ファイルの先頭から YAML Front Matter を抽出するだけです。オートマトンまたは正規表現で解析できます。それは本当にあなた次第です。構造は常に同じです。

---
ここにいくつかの YAML
---
Markdown / テキスタイル / ファイルの HTML 内容
于 2012-08-12T17:24:29.390 に答える