0
我对使用Stax Parser进行xml读取有一个疑问。 预期结果:Java HashMap未返回预期结果
hq_seq_mast {SEQ_VAL = SEQ_VAL,1 =柱,LAST_SEQ_VAL = LAST_SEQ_VAL,2 =柱} db_sequence_info {TNAME = TNAME,3 =柱,CNAME = CNAME,4 =列}
实际结果:
{hq_seq_mast = {},db_sequence_info = {}}
什么我已经完成的错误。
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
public class SaxDiffChecker {
public static LinkedHashMap<String,LinkedHashMap<String,String>>FirstxmlCollection=new LinkedHashMap<String,LinkedHashMap<String,String>>();
public static LinkedHashMap<String,String> firstXml=new LinkedHashMap<String,String>();
public static String tableName=null;
public static String tableendElement=null;
public static String columendElement=null;
public static String characterElement=null;
public static String tempendElement=null;
public static String tempName=null;
public static String ntempName=null;
public static int key=0;
public void print(String fileLocation) {
try {
FileInputStream fileInputStream = new FileInputStream(fileLocation);
XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader(fileInputStream);
while (xmlStreamReader.hasNext()) {
printEventInfo(xmlStreamReader);
}
System.out.print("======="+FirstxmlCollection);
xmlStreamReader.close();
} catch (XMLStreamException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (FileNotFoundException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
private static void printEventInfo(XMLStreamReader reader) throws XMLStreamException {
int eventCode = reader.next();
switch (eventCode) {
case 1 :
//System.out.println("event = START_ELEMENT");
//System.out.println("Localname = "+reader.getLocalName()+" Attribute Name"+reader.getAttributeValue(0));
if("table".equalsIgnoreCase(reader.getLocalName())){
tableName=reader.getAttributeValue(null,"name");
tableendElement=reader.getLocalName();
}else if("column".equalsIgnoreCase(reader.getLocalName())){
columendElement=reader.getLocalName();
firstXml.put(reader.getAttributeValue(0),reader.getAttributeValue(0));
}else{
tempendElement=reader.getLocalName();
}
break;
case 2 :
//System.out.println("event = END_ELEMENT");
//System.out.println(tableendElement+"Localname = "+reader.getLocalName());
if(tableendElement.length()>0 && tableendElement!=null && tableendElement.equalsIgnoreCase(reader.getLocalName())){
System.out.println(tableName+"Heeee"+firstXml);
FirstxmlCollection.put(tableName,firstXml);
firstXml.clear();
}else if(columendElement.length()>0 && columendElement!=null && columendElement.equalsIgnoreCase(reader.getLocalName())){
firstXml.put(""+key++,columendElement);
}
break;
case 3 :
//System.out.println("event = PROCESSING_INSTRUCTION");
//System.out.println("PIData = " + reader.getPIData());
break;
case 4 :
//System.out.println("event = CHARACTERS");characterElement
//System.out.println("Characters = " + reader.getText());
break;
case 5 :
//System.out.println("event = COMMENT");
//System.out.println("Comment = " + reader.getText());
break;
case 6 :
System.out.println("event = SPACE");
System.out.println("Space = " + reader.getText());
break;
case 7 :
System.out.println("event = START_DOCUMENT");
System.out.println("Document Started.");
break;
case 8 :
//System.out.println("event = END_DOCUMENT");
System.out.println("Document Ended");
break;
case 9 :
//System.out.println("event = ENTITY_REFERENCE");
//System.out.println("Text = " + reader.getText());
break;
case 11 :
//System.out.println("event = DTD");
//System.out.println("DTD = " + reader.getText());
break;
case 12 :
//System.out.println("event = CDATA");
//System.out.println("CDATA = " + reader.getText());
break;
}
}
public static void main(String[] args) {
SaxDiffChecker eventsPrinter = new SaxDiffChecker();
eventsPrinter.print("C:\\Users\\vellikutti\\Desktop\\bala.xml");
}
}
xml:
<data-dictionary name="hq">
<table engine-type="InnoDB" name="hq_seq_mast" scope="HQ">
<columns>
<column name="SEQ_VAL">
<data-type>int(10)</data-type>
<nullable>false</nullable>
</column>
<column name="LAST_SEQ_VAL">
<data-type>int(10)</data-type>
<nullable>false</nullable>
</column>
</columns>
</table>
<table engine-type="InnoDB" name="db_sequence_info" scope="HQ">
<columns>
<column name="TNAME">
<data-type>varchar(30)</data-type>
<nullable>false</nullable>
</column>
<column name="CNAME">
<data-type>varchar(30)</data-type>
<nullable>false</nullable>
</column>
</columns>
</table>
亲爱user845279现在导致像 {hq_seq_mast = {},db_sequence_info = {}} – BALASCJP
@BALASCJP - 我只是测试它,更换' firstXml.clear()'与'firstXml =新的LinkedHashMap()',它会工作。 –
user845279
'firstXml.clear()'&'firstxml = new LinkedHashMap();'之间的确切区别是什么?在上面我首先分配了'FirstxmlCollection.put(tableName,firstXml);'然后只清除问题如何出现,请你解释一下'firstXml.clear()' –
BALASCJP