Java HashMap未返回预期结果
对于使用Stax解析器读取xml,我有一个疑问。 预期结果: hq_seq_mast{seq_VAL=seq_VAL,1=列,LAST_seq_VAL=LAST_seq_VAL,2=列} db_sequence_info{TNAME=TNAME,3=column,CNAME=CNAME,4=column} 实际结果: {hq_seq_mast={},db_sequence_info={} 我犯了多大的错误Java HashMap未返回预期结果,java,hashmap,linkedhashmap,Java,Hashmap,Linkedhashmap,对于使用Stax解析器读取xml,我有一个疑问。 预期结果: hq_seq_mast{seq_VAL=seq_VAL,1=列,LAST_seq_VAL=LAST_seq_VAL,2=列} db_sequence_info{TNAME=TNAME,3=column,CNAME=CNAME,4=column} 实际结果: {hq_seq_mast={},db_sequence_info={} 我犯了多大的错误 import javax.xml.stream.XMLStreamReader; impo
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");
}
import javax.xml.stream.XMLStreamReader;
导入javax.xml.stream.XMLInputFactory;
导入javax.xml.stream.XMLStreamException;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
导入java.util.LinkedHashMap;
公共类检查程序{
公共静态LinkedHashMapFirstxmlCollection=新LinkedHashMap();
public static LinkedHashMap firstXml=new LinkedHashMap();
公共静态字符串tableName=null;
公共静态字符串tableendElement=null;
公共静态字符串columendElement=null;
公共静态字符串characterElement=null;
公共静态字符串tempendElement=null;
公共静态字符串tempName=null;
公共静态字符串ntempName=null;
公共静态int键=0;
公共作废打印(字符串文件位置){
试一试{
FileInputStream FileInputStream=新的FileInputStream(fileLocation);
XMLStreamReader XMLStreamReader=XMLInputFactory.newInstance().createXMLStreamReader(fileInputStream);
而(xmlStreamReader.hasNext()){
printEventInfo(xmlStreamReader);
}
系统输出打印(“=======”+FirstxmlCollection);
xmlStreamReader.close();
}捕获(XMLStreamException e){
e、 printStackTrace();//要更改catch语句的主体,请使用文件|设置|文件模板。
}catch(filenotfounde异常){
e、 printStackTrace();//要更改catch语句的主体,请使用文件|设置|文件模板。
}
}
私有静态void printEventInfo(XMLStreamReader阅读器)引发XMLStreamException{
int eventCode=reader.next();
开关(事件代码){
案例1:
//System.out.println(“事件=开始元素”);
//System.out.println(“Localname=“+reader.getLocalName()+”属性名“+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();
put(reader.getAttributeValue(0),reader.getAttributeValue(0));
}否则{
tempendElement=reader.getLocalName();
}
打破
案例2:
//System.out.println(“事件=结束元素”);
//System.out.println(tableendElement+“Localname=“+reader.getLocalName());
if(tableendElement.length()>0&&tableendElement!=null&&tableendElement.equalsIgnoreCase(reader.getLocalName()){
System.out.println(tableName+“heee”+firstXml);
FirstxmlCollection.put(表名,firstXml);
firstXml.clear();
}else if(columendElement.length()>0&&columendElement!=null&&columendElement.equalsIgnoreCase(reader.getLocalName()){
firstXml.put(“+key++,columendElement”);
}
打破
案例3:
//System.out.println(“事件=处理指令”);
//System.out.println(“PIData=“+reader.getPIData());
打破
案例4:
//System.out.println(“事件=字符”);characterElement
//System.out.println(“Characters=“+reader.getText());
打破
案例5:
//System.out.println(“事件=注释”);
//System.out.println(“Comment=“+reader.getText());
打破
案例6:
System.out.println(“事件=空间”);
System.out.println(“Space=“+reader.getText());
打破
案例7:
System.out.println(“事件=开始文档”);
System.out.println(“文档已启动”);
打破
案例8:
//System.out.println(“事件=结束文档”);
系统输出打印项次(“文件结束”);
打破
案例9:
//System.out.println(“事件=实体_引用”);
//System.out.println(“Text=“+reader.getText());
打破
案例11:
//System.out.println(“事件=DTD”);
//System.out.println(“DTD=“+reader.getText());
打破
案例12:
//System.out.println(“event=CDATA”);
//System.out.println(“CDATA=“+reader.getText());
打破
}
}
公共静态void main(字符串[]args){
SaxDiffChecker eventsPrinter=新SaxDiffChecker();
打印(“C:\\Users\\vellikutti\\Desktop\\bala.xml”);
}
}
xml:
国际(10)
假的
国际(10)
假的
瓦查尔(30)
假的
瓦查尔(30)
假的
这是您的问题
firstXml.clear()
。数据正在被清除。您可能希望将firstXml设置为局部变量,或将其设置为firstXml=new LinkedHashMap()代码>,而不是清除它
代码更改:
//create new map instead of clearing saved map (remember - obj passed by ref)
firstXml=new LinkedHashMap<String,String>();//firstXml.Clear();
亲爱的用户845279现在的结果像{hq_seq_mast={},db_sequence_info={}}@BALASCJP-我刚刚测试过它,用firstXml.clear()
替换firstXml=new LinkedHashMap()
它会工作的。firstXml.clear()
和firstXml=new LinkedHashMap()代码>。在上面,我首先分配了FirstxmlCollection.put(tableName,firstXml)代码>然后才清除然后问题是如何产生的请你解释一下firstXml.clear()
我不确定我是否可以在评论中解释这个想法,你应该读一下。行FirstxmlCollection.put(tableName,firstXml)代码>不制作t的副本
//create new map instead of clearing saved map (remember - obj passed by ref)
firstXml=new LinkedHashMap<String,String>();//firstXml.Clear();
hq_seq_mastHeeee [SEQ_VAL:SEQ_VAL, 0:column, LAST_SEQ_VAL:LAST_SEQ_VAL, 1:column]
db_sequence_infoHeeee [TNAME:TNAME, 2:column, CNAME:CNAME, 3:column]
Document Ended
=======[hq_seq_mast:[SEQ_VAL:SEQ_VAL, 0:column, LAST_SEQ_VAL:LAST_SEQ_VAL, 1:column], db_sequence_info:[TNAME:TNAME, 2:column, CNAME:CNAME, 3:column]]