XMLStreamConstants含义不同的字段详细信息

时间:2015-08-12 03:11:28

标签: java xml

如果之前有人问这个问题,我很抱歉。为了澄清,我在下面创建了这段代码。在这段代码中,有一个包含switch语句的while循环。我不明白的是在switch语句中,有START_ELEMENTCHARACTER,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>

1 个答案:

答案 0 :(得分:1)

读者使用XMLStreamConstants中的常量来通知您刚从XML文档中读取的元素类型。

如果eventXMLStreamConstants.START_ELEMENT,那么读者只需阅读XML元素的开始标记即可。在您的示例中,可以是<employees>或任何<employee><firstName><lastName><location>标记。

相反,如果eventXMLStreamConstants.END_ELEMENT,那么读者只需读取XML元素的结束标记即可。在您的示例中,可以是</employees>或任何</employee></firstName></lastName></location>标记。

START_DOCUMENTEND_DOCUMENT分别只是引用整个XML文档的开头和结尾。

最后,CHARACTERS指的是文档中不是评论或CDATA的文字。在您的示例中,这将是firstNamelastNamelocation标记内的任何内容。