1

序文: Java 用の docx パーサーに取り組んでいます。docx 形式は xml に基づいています。ドキュメントを読むと、その部分が非整列化されています (JAXB を使用)。そして、xml マークアップに基づいて特定の要素のツリーを取得します。

ほとんどの問題: しかし、いくつかの要素 (非常に深い xml レベルにある) は、docx 仕様 (つまり、CTStyle、CTDrawing、CTInline など) から特定のクラスとしてではなく、オブジェクトとして返されます。これらのオブジェクトは、ElementNSImpl などの xerces クラスのインスタンスです。

問題: xerces (ElementNSImpl など) からのオブジェクトをどのように処理すればよいですか? 最も簡単な方法は次のとおりです。

CTGraphicData gData = getGraphicData ();
Object obj = gData.getAny().get(0);
ElementNSImpl element = (ElementNSImpl)obj;

しかし、それは良い解決策ではないようです。xerces を直接操作したことはありません。このキャスティングを行うためのより良い方法は何ですか? (誰かがノードを反復する正しい方法についてのヒントもくれれば、それは素晴らしいことです)。

4

1 に答える 1

3

XSD には「any」があったため、JAX-B はその XML の一部を DOM にマッピングしています。「ElementNSImpl」ではなく「Element」にキャストする必要があります。次に、おそらく XPath の助けを借りて、DOM API を使用してデータをプルする必要があります。

JAXB が要素を提供していて、スキーマに xs:any ではなく特定のタイプがあると思われる場合は、JAX-B の構成方法に問題があります。

XSD の xs:any は「何でも」を意味します。

この要素を使用すると、スキーマで指定されていない要素を使用して XML ドキュメントを拡張できます。

于 2010-03-23T15:15:56.993 に答える