0

私は、オープン ソースの DOM XML パーサーを探す任務を負っています。パーサーは、少なくとも XPath 1.0 をサポートする必要があります。スキーマのサポートが望まれますが、取引を妨げるものではありません

解析するファイルは小さいため、速度とメモリ消費は大きな問題ではありません。

任意の OO 言語 (C++、C#、Java など)。

明確にするために、計画では、XML パーサーを外部パーサーで実行できるよりもはるかに緊密にアプリケーションに統合することです。XML に基づいて適応オブジェクト モデルを作成しています (XML を変更し、オブジェクト モデルを変更します)。これを行うには、かなり低いレベルでパーサーを統合する必要があります。これにより、理解するために経験する必要があるレベルのエレガンスが得られます (Yoder 氏に感謝します)。XPath を介してこのオブジェクト モデルをナビゲートする機能がなければ、その優雅さの一部は失われます。

オペレーティング システムが提供するパーサーを使用するプロトタイプを作成しました。これはかなりうまく機能しましたが、複雑さとパフォーマンスの問題に悩まされています。でもまあ、試作品でした。今、私は本当のことをしたいと思っており、パーサーをゼロから書くことができます。(私はその部分をやりましたが、それはちょっと簡単でした。) さて、XPath エンジンは別の話です。私は週末にそれを成し遂げることができないと確信しています。

4

5 に答える 5

1

ここでは、これまでにない優れたJaxenが役立つかもしれません。これは、JDomとDom4Jの両方に使用されるJavaXPath実装です。

2つのDOM実装をトラバースするための共通機能をリファクタリングすることで、任意のツリー型モデルを照会できるXPathエンジンができました。ナビゲーターと呼ばれるものを書くだけでよく、比較的簡単に書くことができます。

FAQから:

別のオブジェクトモデルをサポートするにはどうすればよいですか?

必要なのは、インターフェースorg.jaxen.Navigatorの実装だけです。すべてのインターフェースが必要なわけではなく、org.jaxen.DefaultNavigatorの形式のデフォルトの実装も提供されています。

XPath軸の多くは相互に定義できるため(たとえば、祖先軸は再帰的に適用される親にすぎません)、最初に開始するために必要な低レベルの軸イテレーターはごくわずかです。もちろん、jaxenの作曲能力に頼るのではなく、直接実装することもできます。

私はこれらを比較的速く書くことに気づきました。

于 2008-12-16T14:15:12.723 に答える
0

コードではなく、基礎となる設計ロジックだけが必要な場合は、Ruby の REXML ライブラリーを調べることができます。オブジェクト指向であり、非常に優れており、XPath を完全にサポートしています。

MRI は C と Ruby で実装されています。JRuby は Java で実装されています。

于 2008-12-16T20:07:46.397 に答える
0

おそらく大したことではありませんが、jQuery は DOM を参照する XPath 構文をサポートしているようです。そのソースコードはアクセス可能だと思います。

于 2008-12-17T04:16:46.923 に答える
0

この質問にうまく答えるには、もう少しコンテキストを提供する必要があると思います。そうは言っても、Linq to XML をサポートする .NET 3.5 の Xml 用の新しいオブジェクト モデル (XElement など) により、XML ナビゲーションが大幅に向上することがわかりました。実際には、DOM を使用するよりも桁違いに簡単で優れていることを意味します。

于 2008-12-15T21:09:38.127 に答える
0

C# を許可している場合は、C# 標準ライブラリを利用できませんか? 彼らは不足していますか?

ジャバも同じ?すべては C++ で始まりました。不足がわかりません。

「XML パーサー XPATH」をググると、CPAN、JDOM と J2SE、cocoa、MSXML などのヒットがたくさん見つかります。

ここから検索を始めたばかりですか、それとも標準的な回答では不十分ですか?

編集:

あなたの明確化は、あなたがそれを使用したくないことを私に示唆しています.ソースを使用して、独自のXMLパーサーで独自のXPATHモジュールをジャンプスタートしたいですか? あれは正しいですか?そして、コードではなくデザインだけが必要なので、言語は気にしませんか?

于 2008-12-16T00:05:48.570 に答える