質問

C ++で適合および検証XMLパーサーを構築し、ポケットPCで使用するために軽量にしようとしています。

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

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

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

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

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

だから、私の質問は次のとおりです:アプリケーションに表示される各xmlオブジェクトを渡して、たとえばテキストを連結して解決された結果の属性値を構築する(またはヘルパークラス)ことができる利点は何ですかエンティティ参照?

アンケートを作成している場合は、答えてください:アプリケーションはcdataタグとそれらがxmlファイルのどこにあるかを知る必要がありますか、それとも物事を簡単にします...構築方法を気にせずに文字列内の要素?

よろしく、 マウロH.レジェリ

役に立ちましたか?

解決

  

C ++で準拠および検証XMLパーサーを構築し、軽量にしようとしています

軽量な適合(決して検証しない)パーサーなどはありません。適合パーサーになるためには、DTD外部サブセットに入る可能性のあるすべてのものを理解する必要があります。 XML仕様がすべてのSGML DTDクラッドで重くなったのは残念ですが、私たちは今それで立ち往生しています。

  

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

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

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

  

主にエンティティを処理しようとすると疑問が表示されます

はい。エンティティ参照は完全な災害です。 DOM実装にDOM Level 3 Core / LSに準拠した方法でそれらをサポートさせることは非常に複雑です。可能な限り避けてください。

他のヒント

通常、xmlは軽量ではありません。 JSONのほうがいいです。

パーサーを構築するとき、アプリケーションがどのようにxmlを消費するかについて何も想定すべきではないと思います。むしろ、各xmlノードに最もきめ細かいデータを提供して、最大限の柔軟性を提供します。これには、消費アプリケーションの部分でより多くの作業が必要になる場合がありますが、必要なことは何でも達成できます。がんばろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top