0

私は、C++ で準拠および検証する XML パーサーを構築しており、ポケット pc で使用できるように軽量化を試みています。

最初に、SAX のように、要素や処理命令などについて通知する「イベント」をパーサーに追加することにしました。

このイベントは、xml の DOM ツリーを構築する派生クラスによって取得されます。

主にエンティティ (定義されている場合は、要素、pi、およびコメントを内部に含めることができます) とその解決策を処理しようとすると、疑問が生じます。

たとえば、.NET system.xml パーサーのように、XMLDocType オブジェクトで定義された XMLEntity を参照する XMLEntityRef クラスを作成できます。

私が知っているように、ほとんどの目的で、アプリケーションは要素、その内容、それぞれの属性、およびそれぞれの値を知る必要があります...文字列のみ...要素の内容がcdataオブジェクト、エンティティ参照によって形成されているかどうかは気にしませんおよび/またはプレーンテキスト...同じことが属性値にも当てはまります。

したがって、私の質問は次のとおりです。アプリケーションに各 xml オブジェクトを表示どおりに渡し、それ (またはヘルパー クラス) を構築させることの利点は何ですか?

私が世論調査をしている場合は、答えてください: あなたのアプリケーションは cdata タグとそれらが xml ファイル内のどこにあるかを知る必要がありますか、それとも物事を簡単にしますか... 要素の完全なコンテンツ値を知りたいですどのように構築されているかを気にせずに文字列を作成できますか?

敬具、 マウロ H. レジェリ

4

3 に答える 3

1

私はC++で適合および検証用のXMLパーサーを構築し、それを軽量にしようとしています

軽量の適合(検証を気にしない)パーサーのようなものはありません。準拠するパーサーになるには、DTD外部サブセットに含まれる可能性のあるすべてのものを理解する必要があります。これは実際には厄介な作業です。XML仕様がすべてのSGMLDTDクラッドで圧迫されてしまったのは残念ですが、現在はそれに固執しています。

アプリケーションはcdataタグとそれらがxmlファイルのどこにあるかを知る必要がありますか

通常はありません。DOMレベル3LSでは、デフォルトでCDATAセクションをDOM内のCDATASectionノードに保持する必要がありますが、アプリケーションはほとんど気にしません。

(質問が私のアプリケーションに関するものである場合は、はい。私のアプリケーションは、CDATAセクションを元の場所に保持するテンプレートシステムであるためです。しかし、それでも。)

主にエンティティを処理しようとすると、私の疑問が現れます

はい、神様。エンティティの参照は完全な災害です。DOM実装がDOMレベル3コア/LSに準拠する方法でそれらをサポートするようにすることは非常に複雑です。可能な限り避けてください。

于 2009-11-29T02:02:51.970 に答える
1

一般に、xml は軽量ではありません。JSON を使用したほうがよいでしょう。

于 2009-11-28T22:27:36.173 に答える
1

パーサーを構築するときは、アプリケーションが xml をどのように消費するかについて何も推測する必要はないと思います。むしろ、最大限の柔軟性を提供するために、各 xml ノードに最も詳細なレベルのデータを提供する必要があります。これには、アプリケーションを使用する側でより多くの作業が必要になる場合がありますが、必要なことは何でも達成できます。幸運を。

于 2009-11-29T00:24:57.760 に答える