2016-11-23 3 views
0

Ich benutze StAX Iterator API, um ein XML zu lesen.Wie bekomme ich den gesamten Text des StAX XMLEvent Objekts?

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> 

und Stax-Code:

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

}

Es funktioniert (eventString hat ganzen Text von XMLEvent) in meiner lokalen Umgebung.

Aber wenn ich dies in Server bereitstellen, enthält EventString wie "Stax Event # 1". Also, wenn die Bedingung falsch zurückkehrt.

Ich dachte, beide verwenden verschiedene XMLEvent-Implementierungen. Also überprüfte ich es durch den Code, und jar ist in beiden Umgebungen gleich: jre1.8.0_73/lib/rt.jar! /javax/xml/stream/events/XMLEvent.class

So erhalten Sie den gesamten Text von XMLEvent Objekt? Mache ich hier etwas falsch? Bitte schlagen Sie andere Alternativen vor.

+0

In der Stax-API gibt es nichts, das angibt, was toString zurückgeben soll. Du solltest also niemals dagegen programmieren. Die tatsächliche Implementierung von Stax wird zur Laufzeit abhängig von vielen Faktoren gewählt (System env, Klassenlader-Bestellung von Gläsern, die sich in JSE et JEE unterscheiden, Vorhandensein von META-INF-Dateien ...). Sie können es lesen, aber zählen Sie nicht nur auf die gleichen Gläser, die anwesend sind. Sie sollten mehr über die XMLEvent-API lesen, einem Lernprogramm folgen, es wird NICHT für das gemacht, was Sie hier tun, z. Beginnen an einem gegebenen Knoten und Drucken des Inhalts dieses Knotens. Es ist machbar, aber komplex. – GPI

+0

@GPI Wie kann ich den Inhalt des Knotens lesen? – Hello

+0

@GPI Warum funktioniert es in einer lokalen Umgebung? Irgendeine Idee – Hello

Antwort

1

Jedes XML-Ereignis hat drei Zustände

  1. Startelement
  2. ist Charaktere
  3. End Element

für zB wenn Sie die Daten für "IGRepeatKey" zugreifen müssen Aus Ihrer XML-Datei, dann im Zustand (Start Element), müssen Sie überprüfen, ob IGData-Tag gestartet hat, wenn es wahr ist. Starten Sie einen neuen Iterator, der über alle Tags igriert, z. B. IGRepeatKey, IGOID, TType.

Probieren Sie etwas wie dieses

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); 
} 

Dieses Iterator in xml.isStartElement() Block.

Verwandte Themen