1

OmniXamlプロジェクトの一部としてプル パーサーを作成しました。XML ファイルを読み取り、それを列挙可能な XAML ノードに変換します。しかし、私はこの結果に満足していないので、よりエレガントな方法で別のものを作成することにしました。

これが、 Spracheを使用してパーサーを作成しようとした理由です。

問題は、どうやって始めたらいいのかわからないということです。XAML の解析はコンテキストに大きく依存するため、1 つの Xaml ノードを生成する場合は、次のノードを先読みして処理する必要がある場合があります。現在、XmlReader を使用して XAML を読み取ります。

ここでは、私が何をしたいのかを理解するために、入力/出力の例をいくつかリストしています。入力は XAML コードで、出力は XAML ノードのリストです。XAML ノードは、XAML で表されるオブジェクトを再作成するために必要なデータを保持する構造です。それらはCPUの命令のようなものです。

例 1

入力 (XAML):

<DummyClass xmlns="root" SampleProperty="Property!">  
</DummyClass>

出力 (XAML ノードのリスト)

  • 接頭辞「」を持つ「root」のネームスペース宣言
  • DummyClass 型のオブジェクトの開始
  • タイプ「DummyClass」からのメンバー「SampleProperty」の開始
  • 値ノード:「プロパティ!」
  • メンバーの終わり
  • なし
  • オブジェクトの終わり

例 2

入力:

<DummyClass xmlns="root">
  <DummyClass.Child>
    <ChildClass></ChildClass>
  </DummyClass.Child>
</DummyClass>

出力:

  • 接頭辞「」を持つ「root」のネームスペース宣言
  • DummyClass 型のオブジェクトの開始
  • なし
  • タイプ「DummyClass」からのメンバー「Child」の開始
  • タイプ「ChildClass」のオブジェクトの開始
  • なし
  • オブジェクトの終わり
  • メンバーの終了
  • オブジェクトの終わり

例 3

入力:

  <DummyClass xmlns="root">
    <DummyClass.Items>
      <Item/>
      <Item/>
      <Item/>
    </DummyClass.Items>
  </DummyClass>

出力:

  • 接頭辞「」を持つ「root」のネームスペース宣言
  • DummyClass 型のオブジェクトの開始
  • なし
  • タイプ「DummyClass」から のメンバー「アイテム」の開始</li>
  • [Get Object] ディレクティブ
  • [項目の開始] ディレクティブ
  • タイプ「アイテム」 のオブジェクトの開始</li>
  • なし
  • オブジェクトの終わり
  • タイプ「アイテム」 のオブジェクトの開始</li>
  • なし
  • オブジェクトの終わり
  • タイプ「アイテム」 のオブジェクトの開始</li>
  • なし
  • オブジェクトの終わり
  • メンバーの終了
  • オブジェクトの終わり
  • メンバーの終了
  • オブジェクトの終わり

質問: これをどのように開始しますか?

いくつかのサンプル/ガイドラインを提供していただけますか? ありがとう!

4

0 に答える 0