此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【heliangtai】截止到2008-07-09 16:04:39的历史汇总数据(不包括此帖):
发帖的总数量:0                        发帖的总分数:0                        每贴平均分数:0                        
回帖的总数量:0                        得分贴总数量:0                        回帖的得分率:0%                       
结贴的总数量:0                        结贴的总分数:0                        
无满意结贴数:0                        无满意结贴分:0                        
未结的帖子数:0                        未结的总分数:0                        
结贴的百分比:---------------------结分的百分比:---------------------
无满意结贴率:---------------------无满意结分率:---------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html

解决方案 »

  1.   

    String  addr =school.getAttributes().getNamedItem("addr").getNodeValue();应该可以获得属性
    <?xml version="1.0" encoding="gb2312"?> 
      <notes>
       <note date="2007-4-12">
      <from>小红</from> 
      <to>小林</to> 
      <message>周末一起去吃火锅呀</message> 
     </note>
     </notes>
     import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    class  JieXiXML
    {
     public static void main(String[] args)
     {   
      try{
             DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
             
       DocumentBuilder  builder=factory.newDocumentBuilder();
       
       File f=new File("note.xml");
       
       InputStream  is=new FileInputStream(f);
       
       Document doc=builder.parse(is);
       
       Element  root=doc.getDocumentElement();
       
       NodeList  notes=root.getChildNodes();     for(int i=0;i<notes.getLength();i++)
         {
          
          Node note=notes.item(i);
          
           if(note.getNodeType()==Node.ELEMENT_NODE)
           
        {
                String date =note.getAttributes().getNamedItem("date").getNodeValue();
                
                  System.out.println(date);
                  
               for(Node node=note.getFirstChild();node!=null;node=node.getNextSibling())
                {
                             if(node.getNodeType()==Node.ELEMENT_NODE)
            {
                                   if(node.getNodeName().equals("from"))
                         {
             String from=node.getFirstChild().getNodeValue();
             System.out.println(from);
             }
            if(node.getNodeName().equals("to"))
                 {
                String to=node.getFirstChild().getNodeValue();
                System.out.println(to);
             }
            if(node.getNodeName().equals("message"))
            {
               String message=node.getFirstChild().getNodeValue();
               System.out.println(message);
              }
          }
           }
          }
        }
        }
       catch(ParserConfigurationException e)
       {
       e.printStackTrace();
       }
       catch(SAXException e)
       {
       e.printStackTrace();
       }
       catch(IOException e)
       {
       e.printStackTrace();
       }
      }                                  
    }
      

  2.   

    楼上的回答不是我想要的,我是要Dom4j解决
      

  3.   

    package dom4j.test;import java.io.FileInputStream;
    import java.io.FileNotFoundException;import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;public class Test { /**
     * @param args
     * @throws DocumentException 
     * @throws FileNotFoundException 
     */
    public static void main(String[] args) throws FileNotFoundException, DocumentException {
    // TODO Auto-generated method stub
    Document document=parse();
    Element root=document.getRootElement();
    java.util.List persons=root.elements("person");
    System.out.println(persons.size());
    for(java.util.Iterator i=root.elementIterator();i.hasNext();){
    Element person=(Element)i.next();
    Element name=person.element("name");
    Element company=person.element("company");
    Element school=person.element("school");
    System.out.println("name="+name.getData()+",age="+name.attributeValue("age")+",sex="+name.attributeValue("sex"));
    System.out.println("company="+company.getData()+",addr="+company.attributeValue("addr")+",othername="+company.attributeValue("othername"));
    System.out.println("school="+school.getData()+",addr="+school.attributeValue("addr")+",master="+school.attributeValue("master"));
    }
    }
        public static Document parse() throws DocumentException, FileNotFoundException {
            SAXReader reader = new SAXReader();
            FileInputStream in=new FileInputStream("persons.xml");
            Document document = reader.read(in);
            return document;
        }}其中我把你的xml文件的root元素去掉了(主要是嫌麻烦),变成一下:
    <?xml version="1.0" encoding="UTF-8"?>
    <persons>
    <person>
    <name age="24" sex="男">何良太 </name>
    <company addr="浙江杭州西湖区黄姑山路3号" othername="永程科技股份公司">浙江西安交大龙山软件公司 </company>
    <school addr="安徽省巢湖市" master="张三">巢湖学院 </school>
    </person>
    <person>
    <name age="20" sex="女">张红燕 </name>
    <company addr="北京市东城区四环外线" othername="中国移动">中国移动通信有限公司 </company>
    <school addr="安徽省芜湖市" master="李四">安徽师范大学 </school>
    </person>
    </persons>如果你需要自己加上,程序上只是多了一个层次而已
      

  4.   

    4楼说的很详细了,school和company是分开解析处理的 ,所以 lz不用考虑他们的属性重复怎么处理。
      

  5.   

    谢谢,问题已解决,我用的方法比较土,没有四楼的好,以后应该多来发问。四楼的解析教会了一些东西,真诚的谢谢!
    我自己的解决方案的主要代码如下:(通过遍历现实的)
                SAXReader saxReader = new SAXReader();
                Document document = saxReader.read(Thread.currentThread().getContextClassLoader().getResourceAsStream(filename));
                
                //使用绝对路径
                //List elementList=document.selectNodes("root/persons/person");
                
                //使用相对路径
                List elementList=document.selectNodes("//person");
                Iterator iterator=elementList.iterator();
                while(iterator.hasNext()){
                    Element element=(Element)iterator.next();
                    
                    //遍历下面的name节点的值与属性
                    Iterator nameIterator=element.elementIterator("name");
                    while(nameIterator.hasNext()){
                        Element attributeElement=(Element)nameIterator.next();
                        System.out.println("name="+attributeElement.getText());
                        System.out.println("age="+attributeElement.attributeValue("age"));
                        System.out.println("sex="+attributeElement.attributeValue("sex"));
                    }
                    
                    //遍历下面的company节点的值与属性
                    Iterator companyIterator=element.elementIterator("company");
                    while(companyIterator.hasNext()){
                        Element attributeElement=(Element)companyIterator.next();
                        System.out.println("公司名称="+attributeElement.getText());
                        System.out.println("公司地址="+attributeElement.attributeValue("addr"));
                        System.out.println("公司别名="+attributeElement.attributeValue("othername"));
                    }
                    
                    //遍历下面的school节点的值与属性
                    Iterator schoolIterator=element.elementIterator("school");
                    while(schoolIterator.hasNext()){
                        Element attributeElement=(Element)schoolIterator.next();
                        System.out.println("毕业学校="+attributeElement.getText());
                        System.out.println("学期地址="+attributeElement.attributeValue("addr"));
                        System.out.println("大学校长="+attributeElement.attributeValue("master"));
                    }
                    System.out.println("=========================================");
                    
                }