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对象了。

关于前后台DOM树应用的更多相关文章

  1. DOM树操作

    DOM 操作 访问与树关系(节点) 绘制 DOM 树: childNodes, attributes 从一个中心元素访问其所有的直系亲属元素 访问父节点: parentNode 访问上一个兄弟节点: ...

  2. 通过Ztree生成页面html元素Dom树,以及拖拽改变元素的位置

    zTree 是一款依靠 jQuery 实现的多功能 "树插件",http://www.treejs.cn/v3/main.php#_zTreeInfo,功能强大,不多赘述. 下面我 ...

  3. 【VB6】使用VB6创建和访问Dom树【爬虫基础知识 】

    使用VB6创建和访问Dom树 关键字:VB,DOM,HTML,爬虫,IHTMLDocument 我们知道,在VB中一般大家会用WebBrowser来获取和操作dom对象. 但是,有这样一种情形,却让我 ...

  4. jquery: json树组数据输出到表格Dom树的处理方法

    项目背景 项目中需要把表格重排显示 处理方法 思路主要是用历遍Json数组把json数据一个个append到5个表格里,还要给每个单元格绑定个单击弹出自定义对话框,表格分了单双行,第一行最后还要改ro ...

  5. jQuery操作列表数据转成Json再输出为html dom树

    jQuery 把列表数据转成Json再输出为如下 dom树 <div id="menu" class="lv1"> <ul class=&qu ...

  6. 【浏览器渲染原理】渲染树构建之渲染树和DOM树的关系(转载 学习中。。。)

    在DOM树构建的同时,浏览器会构建渲染树(render tree).渲染树的节点(渲染器),在Gecko中称为frame,而在webkit中称为renderer.渲染器是在文档解析和创建DOM节点后创 ...

  7. dom树的介绍,及原理分析

    三.解析和DOM树的构建 1.解析: 由于解析渲染引擎是一个非常重要的过程,我们将会一步步的深入,现在让我们来介绍解析. 解析一个文档,意味着把它转换为一个有意义的结构——代码可以了解和使用的东西,解 ...

  8. 页面全部加载完毕和页面dom树加载完毕

    dom树加载完毕 $(document).ready()//原生写法document.ready = function (callback) {            ///兼容FF,Google   ...

  9. 从Chrome源码看浏览器如何构建DOM树

    .aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } p { font-size: 1 ...

随机推荐

  1. 使用vue-cli创建一个vue项目

    安装vue-cli npm install -g @vue/cli 1, 使用vue创建一个项目 vue create luffy 2, 安装所需的插件 npm install vue-router ...

  2. 高性能Web服务器Nginx的配置与部署研究(7)核心模块之主模块的非测试常用指令

    1. error_log 含义:指定存储错误日志的文件 语法:error_log <file> [debug|info|notice|warn|error|crit] 缺省:${prefi ...

  3. leetcode BFS解题思路

    Word Ladder 思路一:单向bfs, 使用visited数组记录哪些已经访问过了, 访问过的就不允许再次入队, 同时这里想到的是使用26个英文字母,枚举可能的取值, 类似brute force ...

  4. 电商项目面试题 及mysql面试题 太难没啥用

    需要按照功能点把系统拆分,拆分成独立的功能.单独为某一个节点添加服务器.需要系统之间配合才能完成整个业务逻辑.叫做分布式.集群:同一个工程部署到多台服务器上.优点:1.把模块拆分,使用接口通信,降低模 ...

  5. VMWare windows找不到microsoft软件许可条款

    提示如下错误: windows找不到microsoft软件许可条款.请确保安装源有效,然后重新启动安装. 解决方案: 把该虚拟机中的系统硬件配置中的软盘去掉. 程序员的基础教程:菜鸟程序员

  6. 无需写try/catch,也能正常处理异常

    对于企业应用的开发者来说,异常处理是一件既简单又复杂的事情.说其简单,是因为相关的编程无外乎try/catch/finally+throw而已:说其复杂,是因为我们往往很难按照我们真正需要的策略来处理 ...

  7. robotframework中文显示乱码

    问题描述:接口.数据库返回信息有中文的时候会显示unicode的样式,如图 解决方法: 1.robotframework为3.0.X 2.找到Python安装目录下的\Lib\site-package ...

  8. windows命令行下批量拷贝同一后缀的文件到另外一个目录

    一个目录下有很多文件夹,想拷贝每个文件夹下面的wmv文件到另外一个目录,如果鼠标打开一个文件,拷贝一个,再打开其他的,逐一操作,很麻烦的,百度了一下,xcopy命令就可以实现:例如将C盘x1目录下所有 ...

  9. SpringIOC的理解

    http://www.cnblogs.com/ITtangtang/p/3978349.html---IOC http://blog.csdn.net/fighterandknight/article ...

  10. Java Persistence with MyBatis 3(中文版) 第二章 引导MyBatis

    MyBatis最关键的组成部分是SqlSessionFactory,我们可以从中获取SqlSession,并执行映射的SQL语句.SqlSessionFactory对象可以通过基于XML的配置信息或者 ...