您的位置:程序门 -> java -> j2se / 基础类



xml 的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


xml 的问题
发表于:2007-04-01 02:17:49 楼主
我有一个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);      
           
            }
 
}
请高人指教。
发表于:2007-04-01 11:00:151楼 得分:0
<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),这样就好解析了。


发表于:2007-04-02 09:17:442楼 得分:0
可否请高人指点我怎样在sax   class里做才能把那个manager的元素提出来啊,急!


快速检索

最新资讯
热门点击