Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HashMap未返回预期结果_Java_Hashmap_Linkedhashmap - Fatal编程技术网

Java HashMap未返回预期结果

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

对于使用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;
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]]