XML 的有关问题

XML 的问题我有一个XML的文件当我用JAVASAX把它的资料拿出的时候遇到 MANAGER/ 这个是代表什么意思呢?我

XML 的问题
我有一个XML   的文件当我用JAVA   SAX   把它的资料拿出的时候遇到 <MANAGER/> 这个是代表什么意思呢?我应该怎么把是不是MANAGER这个元素拿出来呢   拿出来呢?
--------------------------
xml   文件
<?xml   version   = "1.0 "   standalone   =   "yes "?>
<!DOCTYPE   COMPANY   [
<!ELEMENT   COMPANY   (DEPARTMENT+)>
<!ELEMENT   DEPARTMENT   (STAFFLIST)>
<!ATTLIST   DEPARTMENT  
NAME   CDATA   #REQUIRED
>
<!ELEMENT   STAFFLIST   (FULLTIMESTAFF|PARTTIMESTAFF)+>
<!ELEMENT   FULLTIMESTAFF   (NAME,   ID,   SALARY,   MANAGER?)>
<!ELEMENT   PARTTIMESTAFF   (NAME,   ID,   HOURLYSALARY)>
<!ELEMENT   SALARY   (#PCDATA)>
<!ELEMENT   ID   (#PCDATA)>
<!ELEMENT   NAME   (#PCDATA)>
<!ELEMENT   MANAGER   EMPTY>
<!ELEMENT   HOURLYSALARY   (#PCDATA)>
]>
<COMPANY>
<DEPARTMENT   NAME   =   "Product   Development ">
<STAFFLIST>
<FULLTIMESTAFF>
<NAME>   John   Tan   Seng   Huat </NAME>
<ID>   S6512345J   </ID>
<SALARY> 4500.00 </SALARY>
<MANAGER/>
</FULLTIMESTAFF>
<FULLTIMESTAFF   >
<NAME>   Peter   Chua   Sim   Lai </NAME>
<ID>   S6934345C   </ID>
<SALARY> 2800.00 </SALARY>
</FULLTIMESTAFF>
<PARTTIMESTAFF>
<NAME>   Cindy   Lam   Lian   Choo </NAME>
<ID>   S6734322K   </ID>
<HOURLYSALARY> 35.00 </HOURLYSALARY>
</PARTTIMESTAFF>
<FULLTIMESTAFF   >
<NAME>   Anisah   Bte   Ismail   </NAME>
<ID>   S6922339B   </ID>
<SALARY> 3100.00 </SALARY>
</FULLTIMESTAFF>
</STAFFLIST>
</DEPARTMENT>
<DEPARTMENT   NAME   =   "Customer   Service ">
<STAFFLIST>
<FULLTIMESTAFF>
<NAME>   Noor   Ali   Bin   Mohamed   </NAME>
<ID>   S6412388J   </ID>
<SALARY> 4200.00 </SALARY>
<MANAGER/>
</FULLTIMESTAFF>
<FULLTIMESTAFF>
<NAME>   Hanisah   Bte   Salleh   </NAME>
<ID>   S6934311F   </ID>
<SALARY> 1800.00 </SALARY>
</FULLTIMESTAFF>
</STAFFLIST>
</DEPARTMENT>
<DEPARTMENT   NAME   =   "Sales   and   Publicity ">
<STAFFLIST>
<FULLTIMESTAFF>
<NAME>   Linda   Peh   Xue   Li </NAME>
<ID>   S6423451J   </ID>
<SALARY> 3500.00 </SALARY>
<MANAGER/>
</FULLTIMESTAFF>
<FULLTIMESTAFF>
<NAME>   Thomas   Lye   Meng   Poh </NAME>
<ID>   S7234344F   </ID>
<SALARY> 1800.00 </SALARY>
</FULLTIMESTAFF>
<PARTTIMESTAFF>
<NAME>   Eugene   Oliver   John </NAME>
<ID>   S7533213F   </ID>
<HOURLYSALARY> 12.00 </HOURLYSALARY>
</PARTTIMESTAFF>


<PARTTIMESTAFF>
<NAME>   Mariah   Bte   Syafik   </NAME>
<ID>   S7835613C   </ID>
<HOURLYSALARY> 10.00 </HOURLYSALARY>
</PARTTIMESTAFF>
</STAFFLIST>
</DEPARTMENT>
</COMPANY>

-----------------------------
java   文件
package   tma02q3jan2007;
import   java.util.*;
import   org.xml.sax.*;
import   java.text.NumberFormat;


public   class   StaffDataProcessor   extends   HandlerBase{

//   instance   variables,   if   any
String   department;
double   salary;
String   id;
String   name;
boolean   isManager=true;
double   hourlySalary;
String   tag;
//flags   to   indicate   where   we   are
boolean   hasAttribute;
//create   staffdata
StaffData   data;
    public   static   void     main(String[]   args){
            //Main   method
            //Sets   up   the   XML   parser   and   connects   it   to   the   file   catalogue.txt
            try
          {
          Class   loadedClass   =   Class.forName( "com.ibm.xml.parser.SAXDriver ");
          Parser   xParser   =   (Parser)loadedClass.newInstance();
          StaffDataProcessor   sdp   =   new   StaffDataProcessor();
          xParser.setDocumentHandler(sdp);
          xParser.setErrorHandler(sdp);
          xParser.parse( "company.txt ");
          }
          catch(Exception   e)
                  {System.out.println( "Problem   starting   XML   processor   "+e.getMessage());}
    }
     

      public   void   error(SAXParseException   se){
            //   Executed   when   a   serious   error   occurs   in   processing   the
            //   XML   source
            System.out.println( "Error:   Problem   in   processing "
                +se.getMessage());
      }

      public   void   warning(SAXParseException   se){
            //   Executed   when   a   minor   problem   occurs   when   processing   the
            //   XML   source
            System.out.println( "Warning:   Problem   in   processing   "
                +se.getMessage());
      }

      public   void   startDocument()   throws   SAXException{
      //Executed   when   the   start   of   an   element   is   encountered


          data=new   StaffData();
            System.out.println( "...Processing   started ");

         
      }

      public   void   startElement(String   elementName,   AttributeList   al)   throws   SAXException{
            //Executed   when   the   start   of   an   element   is   encountered
       
            tag   =   elementName;
            if   (elementName.equals( "DEPARTMENT ")){
                  //   check   whether   there   is   any   attributes
                  if   (al.getLength()   ==   1)   {
                        hasAttribute   =   true;
                        department   =al.getValue(0);
                  }
                  else   hasAttribute   =   false;
            }
      }

     

      public   void   endElement(String   elementName)   throws   SAXException{
            //Executed   when   the   end   of   an   element   is   encountered
            if   (elementName.equals( "PARTTIMESTAFF "))   {
            data.createPartTimeStaffRecord(department,name,id,hourlySalary);
                  //   should   add   the   information   here   to   the   database,
                  //   since   the   XML   record   has   been   read
//if(elementName.equals( "STAFFLIST ")){
//data.createPartTimeStaffRecord(department,name,id,hourlySalary);
               
                    //   if   (hasAttribute){
                  //if(elementName.equals( "PARTTIMESTAFF ")){
                    //data.createPartTimeStaffRecord(department,name,id,hourlySalary);
//}
            }
else   if(elementName.equals( "FULLTIMESTAFF ")){
    if(elementName.equals( "MANAGER "))

                  data.createFullTimeStaffRecord(department,name,id,salary,true);
                 
      else   data.createFullTimeStaffRecord(department,name,id,salary,false);
}

                //   }
//}
     
      }

      public   void   endDocument()   throws   SAXException{


       
       
            NumberFormat   nf   =   NumberFormat.getInstance();
            nf.setMaximumFractionDigits(2);
            nf.setMinimumFractionDigits(2);
           
            String   partDetail=data.getDetails( "PARTTIMESTAFF ");
            System.out.println(partDetail);
            System.out.println( " ");
            double   partTotalSalary=data.getTotalSalary( "PARTTIMESTAFF ");
            System.out.println( "Total   HourlySalary   "+nf.format(partTotalSalary));
            System.out.println( " ");
            System.out.println( " ");
            String   fulDetail=data.getDetails( "FULLTIMESTAFF ");
            System.out.println(fulDetail);
            System.out.println( " ");
            double   fulTotalSalary=data.getTotalSalary( "FULLTIMESTAFF ");
            System.out.println( "Total   Monthly   Salary   "+nf.format(fulTotalSalary));
              //Executed   when   processing   is   finished
            System.out.println( " ");
            System.out.println( "...finished   processing   document ");

      }  

      public   void   characters(char[]   chars,   int   start,   int   length)throws
            SAXException{
            //String   processing
            String   stringRead   =   new   String(chars,   0,   length);
            String   s=   " ";
            boolean   isManager=true;
            //Check   flags   and   save   as   per   flag   status
            if   (tag.equals( "NAME "))  
                                name   =   stringRead;
            else   if   (tag.equals( "ID "))  
                                id   =   stringRead;
            else   if   (tag.equals( "MANAGER/ "))
            stringRead= "**Manager** ";
             
            else   if(tag.equals( "SALARY "))
              salary   =Double.parseDouble(stringRead);
                 


            else   if(tag.equals( "HOURLYSALARY "))
            hourlySalary=Double.parseDouble(stringRead);      
           
            }
 
}
请高人指教。


[解决办法]
<FULLTIMESTAFF>
<NAME> John Tan Seng Huat </NAME>
<ID> S6512345J </ID>
<SALARY> 4500.00 </SALARY>
<MANAGER/>
</FULLTIMESTAFF>

<FULLTIMESTAFF>
<NAME> Peter Chua Sim Lai </NAME>
<ID> S6934345C </ID>
<SALARY> 2800.00 </SALARY>
</FULLTIMESTAFF>
----------------
从这两个 <FULLTIMESTAFF> 元素的比较就可以看到他们的不同之处。
有 <MANAGER/> 元素的表示此人是经理,没有的表示是普通员工,这当然是有用的。
我觉得更好的解决办法是:不要在dtd中设置Manager的值为Empty,最好也设成(#PCDATA),这样就好解析了。