如果之前有人问这个问题,我很抱歉。为了澄清,我在下面创建了这段代码。在这段代码中,有一个包含switch语句的while循环。我不明白的是在switch语句中,有START_ELEMENT
,CHARACTER,
和END_ELEMENTS
。我想知道这意味着什么以及XMLStreamConstant
类的目的是什么。我查看了API(here)。在查看START_ELEMENT
的API中,所有它都说是表示事件是一个开始元素,它似乎没有解释那么多。我还包括了XML文档。在这种情况下,什么是我的开始元素,结束元素等?谢谢你的帮助
public class xmlStreamReaderDemo {
public static void main(String[] args) throws Exception {
List<Employee> empList = null;
Employee currEmp = null;
String tagContent = null;
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = factory.createXMLStreamReader(ClassLoader.getSystemResourceAsStream("employee.xml"));
while(reader.hasNext()){
int event = reader.next();
switch(event){
case XMLStreamConstants.START_DOCUMENT:
empList = new ArrayList<>();
break;
case XMLStreamConstants.START_ELEMENT:
if("employee".equals(reader.getLocalName())){
currEmp = new Employee();
currEmp.id = reader.getAttributeLocalName(0);
}
if("employees".equals(reader.getLocalName())){
empList = new ArrayList<>(); //empList = []
}
break;
case XMLStreamConstants.CHARACTERS:
tagContent = reader.getText().trim();
break;
case XMLStreamConstants.END_ELEMENT:
switch(reader.getLocalName()){
case "employee":
empList.add(currEmp);
break;
case "firstName":
currEmp.firstName = tagContent;
break;
case "lastName":
currEmp.lastName = tagContent;
break;
case "location":
currEmp.location = tagContent;
break;
}
System.out.println(currEmp);
break;
}
}
//print the employee list populated from XML
for(Employee emp: empList){
System.out.println(emp);
}
}
}
class Employee{
String id;
String firstName;
String lastName;
String location;
@Override
public String toString(){
return firstName+" "+lastName;
}
}
员工xml
<employees>
<employee id="111">
<firstName>Jammie</firstName>
<lastName>Deng</lastName>
<location>China</location>
</employee>
<employee id="112">
<firstName>John</firstName>
<lastName>Davis</lastName>
<location>Russia</location>
</employee>
<employee id="113">
<firstName>Peter</firstName>
<lastName>Van</lastName>
<location>Holland</location>
</employee>
</employees>
答案 0 :(得分:1)
读者使用XMLStreamConstants
中的常量来通知您刚从XML文档中读取的元素类型。
如果event
是XMLStreamConstants.START_ELEMENT
,那么读者只需阅读XML元素的开始标记即可。在您的示例中,可以是<employees>
或任何<employee>
,<firstName>
,<lastName>
或<location>
标记。
相反,如果event
是XMLStreamConstants.END_ELEMENT
,那么读者只需读取XML元素的结束标记即可。在您的示例中,可以是</employees>
或任何</employee>
,</firstName>
,</lastName>
或</location>
标记。
START_DOCUMENT
和END_DOCUMENT
分别只是引用整个XML文档的开头和结尾。
最后,CHARACTERS
指的是文档中不是评论或CDATA的文字。在您的示例中,这将是firstName
,lastName
或location
标记内的任何内容。