gpt4 book ai didi

Java HashMap 未返回预期结果

转载 作者:行者123 更新时间:2023-12-02 07:47:27 25 4
gpt4 key购买 nike

我对使用 Stax Parser 读取 xml 有一个疑问。预期结果:

hq_seq_mast {SEQ_VAL=SEQ_VAL, 1=column,LAST_SEQ_VAL=LAST_SEQ_VAL, 2=column} 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");


}

}

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>

最佳答案

这是你的问题firstXml.clear() 。数据正在清除中。您可能希望将firstXml设置为局部变量或将其设置为firstXml = new LinkedHashMap<String,String>(); ,而不是清除它。

代码更改:

//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]]

关于Java HashMap 未返回预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10642004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com