0

GXTとAutoBeansを使用して解析しようとしているXMLメッセージがあります。XMLのルートノードに名前空間宣言があり、AutoBeanパーサーがXMLを読み取れないようです。

AutoBeanオブジェクトグラフのルートをPropertyName指定で設定しました。

@PropertyName("record")
RecordObject getRecord();

しかし、私のXMLが次のようになっている場合:

<record xmlnms:ab="http://anynamespace.com">
<ab:name>SampleName</ab:name>
<ab:email>sample@email.com</ab:email>
</record>

AutoBeanはXMLをデコードできないようです。名前空間宣言が存在しない場合、AutoBeanはルートレコードオブジェクトを見つけることができます。AutoBeanに要素名のみを参照するように指示するために指定できる他の引数または何かがありますか?

私が試したこと

名前空間を削除して解析しようとしましたが、実際のユースケースでは名前空間宣言を削除できません。@PropertyNameまた、属性で名前空間を指定しようとしました@PropertyName("record xmlnms:ab=\"http://anynamespace.com\"")が、それは機能しません(また、期待していませんでした)。

編集

GXTのXmlReaderを使用してXMLを解析しようとしています。

4

1 に答える 1

1

GXTのXmlReaderは、ブラウザー自体に存在する組み込みのXMLパーサーの上にあります。独自のXMLパーサーを構築するのではなく、GWTのモジュールを使用して、com.google.gwt.xml.XMLすべてのブラウザーでXMLノードへの比較的一貫したアクセスを取得します。ブラウザーに組み込まれている実装を使用することで、GXTはネイティブパーサーにアクセスできます。ブラウザーはXMLの解析に非常に優れていることがわかります。これは、ブラウザーが1日中実行してWebページをロードするためです。

次に、GXTには、XPathとCSS3の組み合わせを使用するクエリ言語でノードを検索するための独自のクエリエンジンがあります。この組み合わせにより、html自体でノードを検索したり、xmlドキュメントでノードを検索したりすることができます。これは一貫性を保つように設計されています

ただし、ブラウザーは名前空間のサポートに一貫性がないため(IEを参照)、GWTのXMLモジュールは名前空間について話す方法を認識しておらず、DomQueryエンジンも実際には認識していません。さらに、:XMLでは「名前空間」を意味する演算子はCSSでは「疑似セレクター」を意味するために使用されるため、これを直接サポートする場合、クエリ言語は少し曖昧になります。文字列foo:barは「名前を持つすべての要素」を意味する可能性がありますfoopsuedo-selector bar"または"bar名前空間内の名前を持つすべての要素"に一致しますfoo

問題はこれで十分です:解決策は何ですか?現在、IE6 / IE7 / IE8の名前空間要素に適したものはありません。ブラウザの不整合とGXTの醜い回避策の欠如は、要素を直接読み取ることができないことを意味します。他のすべてのブラウザでは、のような要素を選択するにはnamespace:eltname、を使用します@PropertyName("eltname")

もう1つの注意:属性には疑似セレクターがないため、それらを選択できます-@PropertyName("namespace:attrname")の属性の値が正しく読み取られます<element namespace:attrname="value">

于 2012-11-16T17:29:47.243 に答える