如我要读取本地机器上D:下的一个XML文件的某个节点的内容

解决方案 »

  1.   

    客户端是java写的话,就直接读取D盘下某某个文件如果是web系统的话,用java做的话,用applet,不想用java可以借助Actix控件,网上也有一些第三方公司的控件,但多是收费的。
      

  2.   


    public static void main(String[] args) throws JDOMException {
    //取得当前主机存放项目的绝对路径
    String workPath = System.getProperty("user.dir");
    //实例化
    JDomHandler jdomhandler = new JDomHandler();
    //得到document对象
    Document doc = jdomhandler.loadXmlByPath(workPath + File.separator + "config"
    + File.separator + "461030.xml");
    //把document对象设置到set属性中去
    jdomhandler.setDoc(doc);
    //doc=document.addNodeVaue("ROOT/HEAD", "aa;a", "ccc");
    //doc=document.removeNodesUnderOneNode("trades/trade",doc);
    //doc = document.modifyNodeValue("trades/trade/aaa", "bbb");
    //String aa = document.getNodeValue("trades/trade/aaa");
    //声明属性
    String attribute = "";
    String value="";
    String value2 = "";
    List l = null;
    try {

    value = jdomhandler.getNodeValue("ROOT/HEAD/NODENAME");
    //System.out.println("##################"+value);
    //attribute = jdomhandler.getNodeAttribute("trades/trade", "av");
    jdomhandler.addNodeVaue("ROOT/HEAD","bbb", "CC");
    jdomhandler.addNodeVaue("ROOT/HEAD","bbb", "BB");
    jdomhandler.addNodeVaue("ROOT/HEAD","bbb", "AA");
    Map m = new Hashtable<String,String>();
    m.put("aa", "bb");
    m.put("aa1", "bb1");
    jdomhandler.addNodeAttribute("ROOT/HEAD", m);
    //得到单个的节点所对应的值
    //System.out.println(jdomhandler.hasNode("ROOT/HEAD/bbbb"));
    //System.out.println((jdomhandler.getNodeAttribute("ROOT/HEAD", "aa")));
    //System.out.println((jdomhandler.getNodeAttribute("ROOT/HEAD", "aa1")));
    value2 = jdomhandler.getNodeValue("ROOT/HEAD/bbb");
    l= jdomhandler.getNodeValues("ROOT/HEAD/bbb");

    System.out.println(jdomhandler.toString());
    } catch (JDOMException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (JDomHandlerException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //List l = document.getNodeValues("trades/trade/aaa");
    //boolean flag = jdomhandler.hasNode("trades/trade/treatment/classname");
    //List l = document.getNodeNames("trades/trad");
    //doc = document.removeNode("trades/trade/aaa");

    //System.out.println(document.toString(doc));

    // System.out.println("attribute:"+attribute);
    // System.out.println("value:"+value);
    // System.out.println("value2:"+value2);
    //     System.out.println("listSize:"+l);
    }
      

  3.   

    public Document loadXmlByPath(String path) {
    try {
    //表示使用的是默认的解析器
    SAXBuilder builder = new SAXBuilder(false);
    //得到document
    doc = builder.build(new File(path));
    } catch (Exception e) {
    e.printStackTrace();
    }
    return doc;
    }
      

  4.   

    要读取文件。知道路径就是用io流来获取xml了
      

  5.   

    我还看到过一种 public Document getDocument()
      {
        try
        {
          File file = new File(路径);
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          DocumentBuilder db = dbf.newDocumentBuilder();
          return db.parse(file);
        } catch (Exception e) {
          Log.addErrorLog("获取Document时发生异常:" + e.getMessage()); }
        return null;
      }  public HashMap<Object, Object> getFetionFromData()
      {
        HashMap fromHM = new HashMap();
        Document doc = getDocument();
        NodeList nlFrom = doc.getElementsByTagName("主节点名称");
        for (int i = 0; i < nlFrom.getLength(); ++i) {
          fromHM.put("节点名称", doc.getElementsByTagName("fetion-tel").item(i).getFirstChild().getNodeValue());
          fromHM.put("节点名称", doc.getElementsByTagName("fetion-pwd").item(i).getFirstChild().getNodeValue());
        }
        return fromHM;
      }感觉上很奇怪,dom解析下个api,看着搞就行了
      

  6.   


    import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    import org.xml.sax.helpers.DefaultHandler;public class TestSAXParser {
        /** 基于SAX方式解析XML文档 */
        public static void main(String[] args)
        throws SAXException,ParserConfigurationException,IOException{
            SAXParserFactory factory = SAXParserFactory.newInstance(); //创建SAX解析器工厂
            factory.setValidating(true);                               //让error方法生效
            SAXParser parser = factory.newSAXParser();                 //生成一个具体的SAX解析器
            parser.parse("src/file/student.xml",new XMLreader());      //开始解析
    }}class XMLreader extends DefaultHandler {
        // 只需覆盖我们感兴趣的方法
        private int counter = 0;// 定义一个计数器,保存XML文档触发事件的次数
       
        @Override   // 文档开始事件触发
        public void startDocument() throws SAXException {
            counter++;
            System.out.println(counter + ".解析XML文件开始...");}
        
        @Override  // 文档结束事件触发
        public void endDocument() throws SAXException {
        counter++;
        System.out.println("\r\n"+counter + ".解析XML文件结束...");}
        
        @Override  // 元素开始事件触发
        public void startElement(String uri, String localName, String qName,
        Attributes atts) throws SAXException {
          counter++;
          System.out.print(counter+".<"+qName);
            for(int i=0; i<atts.getLength();i++){ //读取标志的所有属性
              System.out.print(" "+atts.getLocalName(i)+"="+atts.getValue(i));
          }System.out.print(">"); }
        
        @Override  // 元素结束事件触发
        public void endElement(String uri, String localName, String qName) throws SAXException {
            counter++;
            System.out.print(counter +".</"+qName+">");}
        
        @Override // 文本事件触发  打印时尽量不要换行,否则很难看
        public void characters(char[] ch, int start, int length)throws SAXException {
            counter++;
            String text = new String(ch, start, length); // 当前元素的文本值
            System.out.print(counter + ".Text=" + text);}
        
        @Override //这是可恢复错误。需在SAXParserFactory设置有效性错误才能生效
        public void error(SAXParseException e) throws SAXException {
            System.out.println("xml文档有效性错误:"+e);}
        
        @Override //严重错误
        public void fatalError(SAXParseException e) throws SAXException {
            System.out.println("xml文档严重的有效性错误:"+e);}
    }
      

  7.   


    比较DOM与SAX:
        DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问
        优点:1.提供随机定义元素操作,来回移动指针
             2.将整个XML文件一次性加载到内存,形成虚的内存树
        缺点:1.如果XML文件较大,内存空间占用较大
             2.强制将较大的XML文件加载到内存中,有可能损害文件
             3.功能通用性    SAX:不同于DOM,SAX是事件驱动型的XML解析方式。它顺序逐行读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问
      

  8.   

    B/S 应用是无法读取客户端机器上的 XML 文档的。