你需要先遍历所有节点,然后再对得到的list进行过滤,取得文本值为11的记录

解决方案 »

  1.   

    <?xml version="1.0" encoding="UTF-8"?>
    <forbid>
    <startday>2008-01-01</startday>
    <endday>2008-07-19</endday>
    <province>1</province>
    <university>1</university>
    <number>10</number>
    <number_out></number_out>
    </forbid>
    这个是我的XML。凡是没有现成的,看看你就知道了,差不多。下面是我自己写的
    有读  写 和新建的功能
    package com.xxxxx.platform.xxxxx.utils;import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.List;import javax.servlet.ServletConfig;
    import javax.servlet.http.HttpServletRequest;import org.apache.log4j.Logger;
    import org.apache.struts2.ServletActionContext;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;import com.xxxxx.platform.xxxxx.utils.HandupInitialiser.xxxxx;public class RWXml { private final static Logger _logger = Logger.getLogger(FtpClientUtil.class);
    public void setXMLParameter(String title,String key,String value,String filepath){

    HttpServletRequest request = ServletActionContext.getRequest();
    String path=request.getSession().getServletContext().getRealPath("");
    path=path+filepath;

    try{
               SAXReader saxReader = new SAXReader();    
               Document document = saxReader.read(new File(path));
               /*
                * XML文件操作
                */
               /** 过得要插入的节点 */
               String nod = title+"/"+key;
               /** 定位节点 */
               List list = document.selectNodes(nod);
               Iterator iter = list.iterator();
               if(iter.hasNext()){
                   Element Element = (Element)iter.next();
                   Element.setText(value);
               }
               try{
                   /** 将document中的内容写入文件中 */
                   XMLWriter writer = new XMLWriter(new FileWriter(new File(path)));
                   writer.write(document);
                   writer.close();
               }catch(Exception ex){
                   ex.printStackTrace();
               }
               
            }catch(Exception ex){
               ex.printStackTrace();
           }
    }
    public String getXMLParameter(String title,String key,String filepath){ HttpServletRequest request = ServletActionContext.getRequest();
    String path=request.getSession().getServletContext().getRealPath("");
    path=path+filepath;
    String value=new String();
    try{
    SAXReader saxReader = new SAXReader(); 
    Document document = saxReader.read(new File(path));
    String nod = title+"/"+key; List list = document.selectNodes(nod);
            Iterator iter = list.iterator();
            while(iter.hasNext()){
                Element Element = (Element)iter.next();
                    value = Element.getText();
                }
    }catch(Exception e){
    e.printStackTrace();
    }
           return value;
        }           
        
     /**
         * 生成XML文件 
         */
        public void creatXML(String remoteFile,String home_url){
          String fielname = "_downfiledXML.xml";
          
          _logger.info("home_url="+home_url);
          String url = home_url+fielname;
          File f = new File(url);
          Date date = new Date();
          String date1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
          if(!f.exists()){
          Document document = DocumentHelper.createDocument();//创建Document对象  
          Element catalogElement = document.addElement("datas");//创建节点名为"datas"的一级节点
          Element book = catalogElement.addElement("book");//在一级节点"datas"下创建节点名为"book"的二级节
         // book.addAttribute("id",i+"");//在"book"节点上加一个属性名为"bookid"值为bookid的属性
          Element dates = book.addElement("date");//在"book"下创建节点名为"lookCount"的节点
          dates.setText(date1);
          Element urls = book.addElement("url");
          urls.setText(remoteFile);
          XMLWriter output;//输出流写XML文件
                 try {        
                      OutputFormat format = new OutputFormat("  ", true, "GB2312");
                      output = new XMLWriter(new FileWriter(new File(url)), format);
                      output.write(document);
                      output.close();
                 } catch (IOException e) {
                      e.printStackTrace();
                 }
          }else{
          SAXReader saxReader = new SAXReader();
          Document document = null;
          try {
    document = saxReader.read(new File(url));
    } catch (DocumentException e1) {
    e1.printStackTrace();
    }
          Element rootElement =(Element)document.getRootElement();//获取XML的根节点
          Element book = rootElement.addElement("book");//增加book节点
         // book.addAttribute("id",(i++)+"");//在"book"节点上加一个属性名为"bookid"值为bookid的属性
          Element dates = book.addElement("date");//在"book"下创建节点名为"lookCount"的节点
          dates.setText(date1);
          Element urls = book.addElement("url");
          urls.setText(remoteFile);
          XMLWriter output;
                 try{                                
             OutputFormat format = new OutputFormat("", true, "GB2312");
             output = new XMLWriter(new FileWriter(new File(url)), format);
             output.write(document);
             output.close();
       }catch (IOException e) {
             e.printStackTrace();
       }
          }
        
        }
    }调用方法:
    在CLASS中:    private RWXml wa = new RWXml();String value = wa.getXMLParameter(title, nod,filepath); //title 是主节点 ,nod 是要查询的节点 filepath 是XML的存储地址,我是用相对地址
                                                                           //  /WEB-INF/write.xml
    String value = wa.setXMLParameter(title, nod, insert_value, filepath);//insert_value 是要插入的值注意,所有的参数都是String 其他的类型要转换后再使用。希望能帮到你