2016-11-23 2 views
0

私はStAX Iterator APIを使用してxmlを読み取ります。StAX XMLEventオブジェクトの全文を取得する方法は?

XML:

<FormData OID="QUAL"> 
    <IGData IGRepeatKey="1" IGOID="SQUAL" TType="Insert"> 
     <IData Value="0859" IOID="SID"></IData> 
     <IData Value="DM" IOID="RDOMAIN"></IData> 
    </IGData> 
    <IGData IGRepeatKey="1" IGOID="SQUAL" TType="Insert"> 
     <IData Value="0860" IOID="SID"></IData> 
     <IData Value="2013-01-03T02:00" IOID="QVAL"></IData> 
    </IGData> 
</FormData> 

そしてスタックスコード:

while(xmlEventReader.hasNext()){ 
    xmlEvent = xmlEventReader.nextEvent(); 
    eventString = xmlEvent.toString(); 
    if(xmlEvent.isStartElement() && eventString.contains("FormData") && eventString.contains("QUAL")){ 
     //do something 
    } 

}

それは私のローカル環境で(eventStringはのXMLEventのテキスト全体を持って)取り組んでいます。

しかし、これをサーバーにデプロイすると、eventStringには「Stax Event#1」のような内容が含まれます。したがって、条件がfalseを返す場合

私は両方とも異なるXMLEvent実装を使用していると思っていました。だからコードで確認したところ、jar1.8.0_73/lib/rt.jar!/javax/xml/stream/events/XMLEvent.class

XMLEventの全文を取得する方法オブジェクト?私はここで何か悪いことをしていますか?他の選択肢を提案してください。

+0

toStringが返すべきものを指定するものはStax APIには何もありません。だからあなたはそれに対して決してコード化すべきではありません。 Staxの実際の実装は、多くの要素(システムenv、JSEおよびJEEで異なるJARのクラスローダの順序付け、META-INFファイルの存在など)に応じて実行時に選択されます。あなたはそれを読むことができますが、存在しているだけのジャーにはカウントしません。 XMLEvent APIの詳細については、チュートリアルに従ってください。ここで何をしているのかは分かりません。与えられたノードから開始し、そのノードの内容を印刷する。それは実行可能ですが、複雑です。 – GPI

+0

@GPIどのようにノードの内容を読むことができますか? – Hello

+0

@GPIなぜローカル環境で動作していますか?任意のアイデア – Hello

答えて

1

すべてのXMLイベントは、あなたが "IGRepeatKey" のデータにアクセスする必要がある場合

  1. スタート要素
  2. は、文字などのため
  3. エンド要素

である3つの状態を持っていますXMLファイルから状態(開始要素)で、IGDataタグが開始されているかどうかを確認する必要があります。つまり、IGRepeatKey、IGOID、TTypeのすべてのタグを反復処理する新しいIteratorを開始します。

はxml.isStartElement()ブロックでこのイテレータを追加この

Iterator<Attribute> iterator = element.getAttributes(); 
while (iterator.hasNext()) 
{ 
    Attribute attribute = (Attribute)iterator.next(); 
    QName name = attribute.getName(); 
    String value = attribute.getValue(); 
    System.out.println(name+" + "+value); 
} 

のようなものを試してみてください。

関連する問題