我有一个XML文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<top>
<dist id="1">
<emp name="gaara" age="22" location="konoha"/>
<emp name="vegeta" age="44" location="namek"/>
<assitant name="nappa" age="64" location="namek"/>
</dist>
<dist id="2">
<emp name="naruto" age="20" location="konoha"/>
<emp name="lei" age="21" location="sand"/>
<assitant name="gohan" age="25" location="island"/>
</dist>
</top>
预期结果如下:
Required O/P
1 | gaara | 22 | konoha
1 | vegeta | 44 | namek
2 | naruto | 20 | konoha
2 | lei | 21 |sand
任何人都可以解释我怎么能这样做。有一点是输出不应包含助手元素数据。
我会发布代码,但由于元素不止一次出现,我的代码无效。
修改 我发布了代码:
1)包含主
的类import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
public class loadNwccData {
public static void main(String[] args) throws XMLStreamException, FileNotFoundException {
List<Employee> empList = null;
Employee currEmp = null;
XMLInputFactory factory = XMLInputFactory.newInstance();
InputStream inputStream= new FileInputStream("C:\\Documents and Settings\\samp\\Desktop\\sample.xml");
XMLStreamReader reader =
factory.createXMLStreamReader(inputStream);
while(reader.hasNext()){
int event = reader.next();
switch(event){
case XMLStreamConstants.START_ELEMENT:
if ("dist".equals(reader.getLocalName())){
currEmp = new Employee();
currEmp.id = reader.getAttributeValue(null, "id");
}
else if ("emp".equals(reader.getLocalName())){
currEmp.name = reader.getAttributeValue(null, "name");
currEmp.age = reader.getAttributeValue(null, "age");
currEmp.location = reader.getAttributeValue(null, "location");
}
if("top".equals(reader.getLocalName())){
empList = new ArrayList<Employee>();
}
break;
case XMLStreamConstants.END_ELEMENT:
Cloumns value = Cloumns.valueOf(reader.getLocalName());
switch(value){
case emp:
empList.add(currEmp);
break;
}
break;
case XMLStreamConstants.START_DOCUMENT:
empList = new ArrayList<Employee>();
break;
}
}
//Print the employee list populated from XML
for ( Employee emp : empList){
System.out.println(emp);
}
}
}
class Employee{
String id;
String name;
String age;
String location;
@Override
public String toString(){
return id +" | " +name +" | "+age +" | "+location;
}
}
2)eenum文件
public enum Cloumns {emp,assitant,dist,top};
3)我得到的O / P:
1 | vegeta | 44 | namek
1 | vegeta | 44 | namek
2 | lei | 21 | sand
2 | lei | 21 | sand
任何人都可以在这里重复指出问题是什么。
答案 0 :(得分:1)
问题是您为dist
元素创建了Employee记录。
if ("dist".equals(reader.getLocalName())){
currEmp = new Employee();
currEmp.id = reader.getAttributeValue(null, "id");
}
这是我的多个员工定义。有效地将最后一个元素数据转换为员工记录。
我会将id存储到变量中,比如currentDistID
并将其与Employee一起使用。应为每个employee
元素创建员工记录。
码
public static void main(String[] args) throws XMLStreamException, FileNotFoundException {
List<Employee> empList = null;
Employee currEmp = null;
XMLInputFactory factory = XMLInputFactory.newInstance();
String currentDistID=null;
InputStream inputStream= new FileInputStream("c:\\sample.xml");
XMLStreamReader reader =
factory.createXMLStreamReader(inputStream);
while(reader.hasNext()){
int event = reader.next();
switch(event){
case XMLStreamConstants.START_ELEMENT:
if ("dist".equals(reader.getLocalName())){
//all subsequent employees share this.
currentDistID = reader.getAttributeValue(null, "id");
}
else if ("emp".equals(reader.getLocalName())){
currEmp = new Employee();
currEmp.id=currentDistID;
currEmp.name = reader.getAttributeValue(null, "name");
currEmp.age = reader.getAttributeValue(null, "age");
currEmp.location = reader.getAttributeValue(null, "location");
}
if("top".equals(reader.getLocalName())){
empList = new ArrayList<Employee>();
}
break;
case XMLStreamConstants.END_ELEMENT:
Cloumns value = Cloumns.valueOf(reader.getLocalName());
switch(value){
case emp:
empList.add(currEmp);
break;
}
break;
case XMLStreamConstants.START_DOCUMENT:
//empList = new ArrayList<Employee>();
break;
}
}
//Print the employee list populated from XML
for ( Employee emp : empList){
System.out.println(emp);
}
}