我有一个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);   
      
      }
 
}
请高人指教。

解决方案 »

  1.   

    <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),这样就好解析了。
      

  2.   

    可否请高人指点我怎样在SAX CLASS里做才能把那个MANAGER的元素提出来啊,急!