hallo,
hab folgendes problem mit stax (verwende im die sun implementation des staxparsers):
ich versuche aus einem xml file (hier eine teilstruktur)
den textknoten mit dem wert 6 des knotens <Entrezgene_type> zu lesen. normalerweise sollte das ja mit XMLStreamreader.getElementText() funktionieren, tut es aber nicht bzw nur so das es einen unangenehmen nebeneffekt hat...
die implementation schaut folgendermassen aus:
das problem ist nun das - sobald die zeile
aufgerufen wird, der endknoten von <Entrezgene_type> nicht mehr erkannt wird (was fuer meine applikation aber unbedingt noetig ist)... sobald ich die zeile rausnehme, laeuft alles wieder wunderbar... und falls ich versuche xmlr.getElementText() for xmlr.getAttributeValue(0) aufzurufen, gibt es folgende fehlermeldung:
obwohl ich ja klar in einem START_ELEMENT bin und diesen noch nicht verlassen habe... das ist echt zum haare raufen
jemand hier der mir helfen kann?
lg kermitblue
hab folgendes problem mit stax (verwende im die sun implementation des staxparsers):
ich versuche aus einem xml file (hier eine teilstruktur)
Code:
<Entrezgene_type value="protein-coding">6</Entrezgene_type>
<Entrezgene_source>
<BioSource>
<BioSource_org>
<Org-ref>
<Org-ref_taxname>Caenorhabditis elegans</Org-ref_taxname>
<Org-ref_db>
<Dbtag>
<Dbtag_db>taxon</Dbtag_db>
<Dbtag_tag>
<Object-id>
<Object-id_id>6239</Object-id_id>
</Object-id>
...
den textknoten mit dem wert 6 des knotens <Entrezgene_type> zu lesen. normalerweise sollte das ja mit XMLStreamreader.getElementText() funktionieren, tut es aber nicht bzw nur so das es einen unangenehmen nebeneffekt hat...
die implementation schaut folgendermassen aus:
Code:
private XMLStreamReader xmlr;
int eventType;
public void run()
{
XMLInputFactory xmlif = null ;
try{
xmlif = XMLInputFactory.newInstance();
xmlif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES,Boolean.TRUE);
xmlif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES,Boolean.FALSE);
xmlif.setProperty(XMLInputFactory.IS_COALESCING , Boolean.TRUE);
}catch(Exception ex){
ex.printStackTrace();
}
long starttime = System.currentTimeMillis();
try{
xmlr = xmlif.createXMLStreamReader("Data/testdata2.xml", new FileInputStream("Data/testdata3.xml"));
eventType = xmlr.getEventType();
int o;
String sqlString = "";
while(xmlr.hasNext()){
eventType = xmlr.next();
switch(eventType)
{
case XMLStreamConstants.START_ELEMENT:
if(xmlr.getLocalName().equals("Entrezgene_type"))
{
System.out.println(xmlr.getAttributeValue(0));
System.out.println(xmlr.getElementText());
}
break;
case XMLStreamConstants.END_ELEMENT:
if(xmlr.getLocalName().equals("Entrezgene_type"))
{
System.err.println("Entrezgene_type closetag");
}
break;
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
das problem ist nun das - sobald die zeile
Code:
System.out.println(xmlr.getElementText());
Code:
java.lang.IllegalStateException: Current state is not among the states START_ELEMENT , ATTRIBUTEvalid for getAttributeValue()
at com.sun.xml.stream.XMLReaderImpl.getAttributeValue(XMLReaderImpl.java:731)
obwohl ich ja klar in einem START_ELEMENT bin und diesen noch nicht verlassen habe... das ist echt zum haare raufen
jemand hier der mir helfen kann?
lg kermitblue