zoukankan      html  css  js  c++  java
  • 关于前后台DOM树应用

    Dom对象是在程序开发中很实用而且经常会应用到的技术,通过Dom对象可以传递具有树结构的对象,有利用前台页面的诸如树的显示和相应值的处理,本文从两个方面全面解析Dom对象的应用,一是从后台得到完整的Dom形式的字符串后到前台页面组装成Dom对象,二是直接在前台页面上直接组装成一个Dom对象。

    (1)后台可以得到的数据一般也分为两种类型,一是直接读取硬盘上的.xml文件生成的,这种形式可以这样调用:

                DocumentBuilder builder=DocumentBuilderFactory

                  .newInstance().newDocumentBuilder(); 

                Document doc=null;  //这两个类最好用org.w3c.dom.Document

                String rootPath=ZhcxtjCtrlHelp.class.getResource("").toString();            

                doc=builder.parse(rootPath+"ybcxtj.xml");

       在后台得到Doc后如果想取值可以这么调用:

               NodeList convertList=doc.getElementsByTagName(elementName);

                Element thisNode=(Element)convertList.item(0);             

                String nodeContent=thisNode.getAttribute("nodeValue");

       当然方法还有很多,不再赘述。

      后台得到Dom对象的另一种方式或者说情况是有时候只是一串字符串,为了前台页面的显示效果,要将其转成                Dom 对象,这个时候可以这样调用:

               try {

                      builder=DocumentBuilderFactory

                        .newInstance().newDocumentBuilder();

                } catch (ParserConfigurationException e) {

                      e.printStackTrace();

                }

                Document doc=builder.newDocument();

                Element root= doc.createElement("root");

                root.setAttribute("state",state);

                root.setAttribute("message",message);   //state 和message 是你传递过来的参数

                doc.appendChild(root);

      当然,第二种方式可以自己随心所欲的控制生成的Doc的节点,只要自己控制好他们的appendChild关系即可。

    如果要将这个Doc对象传到前台页面,除了ajax可以直接传递Dom对象,类似这样:

               response.setContentType("text/xml;charset=UTF-8");

                PrintWriter out = response.getWriter();

                out.println(dataXml);

                out.flush();

                out.close();

                return null;

     绝大多数情况下,我们还是需要先将Doc对象转换成String,然后传到前台页面的,这个从Dom对象转换成String 的方法是这样的:

                 OutputFormat format;

                 try {

                       format = new OutputFormat(SrcDoc);

                       format.setEncoding("UTF-8");

                       StringWriter stringOut = new StringWriter();

                        XMLSerializer serial = new XMLSerializer(stringOut, format);

                       // org.apache.xml.serialize.OutputFormat;

                       // org.apache.xml.serialize.XMLSerializer;

                        serial.asDOMSerializer();

                       serial.serialize(SrcDoc.getDocumentElement());

                        return stringOut.toString();

                      }catch (Exception e) {

                           return "<ERR/>";

                        }

    这样,就完成了后台组装Dom对象,并以String的形式传到了前台页面。

    通过后台传值的方式如何在前台如何得到后台的Dom对象?除了ajax方式的

             var doc = partxmlhttp.responseXML;//得到dialogmessage Dom对象

       绝大多数情况,我们需要在页面上根据后台传来的String字符串,拼装成一个Dom。这里,我们只讲基于    Windows的Explorer浏览器的Dom生成,因为就Mozilla而言,确实是与Explorer有很大差异的。

       其代码是这样的:

               var thisDom;

              var domxml=document.getElementById("xmlstring").value;  //得到从后台传过来的配置树字符串

               var oDom = new ActiveXObject("MSXML2.DOMDocument.5.0"); //利用内置的ActiveX得到Dom控件

               //MSXML2.DOMDocument.5.0是可选的,根据版本的不同,一般这是最新的

               //因为IE从5.0版本就内嵌了这个Dom的ActiveX控件。

               oDom.async = false; //默认是是异步加载,这里控制是同步加载的方式

               if (strPath != null){         

                  thisDom = oDom.load(strPath) ? oDom : null;

                  //strPath是路径,可以按指定路径来加载

               }else{

                  thisDom = oDom.loadXML(domxml) ? oDom : null;

               }

     

       通过上面的代码,我们就在页面上得到了thisDom这个对象。

    (2)第二种方式就是在前台页面直接new一个Dom对象出来,这种方式是很简单,代码如下:

          var dom= new ActiveXObject("MSXML2.DOMDocument.5.0");

          dom.loadXML("<?xml version='1.0' encoding='utf-8' ?><navi></navi>");

          var root1=dom.createElement("navi");

          root1.setAttribute("prikey","SQ");   

          var node11=dom.createElement("name");

          node11.setAttribute("text","A级");

          node11.setAttribute("value","yhl_aj");

          node11.text="Dimmacro";

          var node12=dom.createElement("name");

          node12.setAttribute("text","B级");

          node12.setAttribute("value","yhl_bj");

          root1.appendChild(node11);root1.appendChild(node12);

          var root2=dom.createElement("navi");

          root2.setAttribute("prikey","SB");

          var node21=dom.createElement("name");

          node21.setAttribute("text","B级");

          node21.setAttribute("value","bzl_bj");   

          root2.appendChild(node21);

          dom.documentElement.appendChild(root1);

          dom.documentElement.appendChild(root2);

     

      通过这种手动设置的方式,我们就可以创建一个Dom对象了。

     

     

     

     

     

     

     

     

     

     

     

     

               





  • 相关阅读:
    PHP 使用 GET 传递数组变量
    Java实现 蓝桥杯 算法训练 数据交换
    Java实现 蓝桥杯 算法训练 数据交换
    Java实现 蓝桥杯 算法训练 数据交换
    Java实现 蓝桥杯 算法训练 景点游览
    Java实现 蓝桥杯 算法训练 景点游览
    Java实现 蓝桥杯 算法训练 景点游览
    Java实现 蓝桥杯 算法训练 二进制数数
    Java实现 蓝桥杯 算法训练 二进制数数
    Java实现 蓝桥杯 算法训练 二进制数数
  • 原文地址:https://www.cnblogs.com/dimmacro/p/4460860.html
Copyright © 2011-2022 走看看